日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【笔记】opencv的python实现·像素处理 像素访问 alpha通道

發(fā)布時(shí)間:2024/9/30 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【笔记】opencv的python实现·像素处理 像素访问 alpha通道 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

像素概念

計(jì)算機(jī)在處理某個(gè)圖像時(shí),會(huì)首先將其劃分為一個(gè)個(gè)小方塊,每個(gè)小方塊是一個(gè)獨(dú)立的處理單位,成為像素點(diǎn)

記錄一些基礎(chǔ)語法:
,X[:,0]就是取矩陣X的所有行的第0列的元素,X[:,1] 就是取所有行的第1列的元素
python中的小括號(hào)( ):代表tuple元組數(shù)據(jù)類型,元組是一種不可變序列。
python中的中括號(hào)[ ],代表list列表數(shù)據(jù)類型
大括號(hào){ }花括號(hào):代表dict字典數(shù)據(jù)類型

彩色圖像的讀取

RGB模式的彩色圖像在讀入OPENCV進(jìn)行處理時(shí)會(huì)按照行方向依次讀取該RGB圖像的B通道 G通道 R通道的像素點(diǎn),并將像素點(diǎn)以行為單位存儲(chǔ)在ndarray的列中
可以用image[0,0,0]訪問圖像image的B通道內(nèi)第0行第0列上的像素點(diǎn),第一個(gè)索引表示第0行,第二個(gè)索引為第0列,第三個(gè)索引為顏色通道
image[0,0,1] 訪問第0行第0列第一個(gè)通道的像素值 如果圖像是BGR格式,第一個(gè)通道是G通道,第0個(gè)通道是B通道

使用Numpy生成三維數(shù)組,用來觀察三個(gè)通道值得到變化情況:

import numpy as np import cv2blue = np.zeros((300,300,3),dtype=np.uint8) blue[:, :, 0] = 255 print("blue=",blue) cv2.imshow("blue",blue)green = np.zeros((300,300,3),dtype=np.uint8) green[:, :, 1] = 255 print("green=",green) cv2.imshow("green",green)red = np.zeros((300,300,3),dtype=np.uint8) red[:, :, 2] = 255 print("red=",red) cv2.imshow("red",red) cv2.waitKey()

numpy.zeros的官方解釋:
numpy.zeros(shape, dtype=float, order=‘C’, *, like=None)?
Return a new array of given shape and type, filled with zeros.
可以生成一個(gè)元素都是0的數(shù)組
例子:

> np.zeros(5) array([ 0., 0., 0., 0., 0.]) np.zeros((5,), dtype=int) > array([0, 0, 0, 0, 0]) >>>s = (2,2) >>>np.zeros(s) array([[ 0., 0.],[ 0., 0.]])

自定義類型:

>>> numpy.zeros((2,), dtype=[('x', 'i4'), ('y', 'i4')]) array([(0, 0), (0, 0)], dtype=[('x', '<i4'), ('y', '<i4')])

結(jié)果:

變化一下:

import numpy as np import cv2img = np.zeros((300,300,3),dtype=np.uint8) img[:,0:100,0]=255 img[:,100:200,1]=255img[:,200:300,2]=255cv2.imshow("red",img) cv2.waitKey()


img[:,0:100,0] 其中冒號(hào)表示范圍 即0到第100列

img=np.zeros((2,4,3),dtype=np.unit8) 生成一個(gè)243大小的數(shù)組,對(duì)應(yīng)一個(gè)2行4列3個(gè)通道的BGR圖像 img[0,3]:會(huì)訪問第0行第3列位置上的B通道G通道R通道三個(gè)像素點(diǎn) img[1,2,2]訪問第1行第2列第2個(gè)通道的像素點(diǎn)
執(zhí)行下面語句:

img[0,0] = 244 img[0:100,0:100,2] = 78 print(img[0,0])

輸出[244 244 78]

像素訪問

numpy.array提供了item()和itemset()函數(shù)來訪問和修改像素值,item可以更加高效地訪問圖像的像素點(diǎn),itemset:修改像素值,語法格式為itemset(索引值,新值)
函數(shù)item訪問RGB模式圖像的像素時(shí),語法格式為item(行,列,通道) 通道不能省略
隨機(jī)生成一副彩色圖像:

import numpy as np import cv2img = np.random.randint(0,256,size=[256,256,3],dtype=np.uint8) cv2.imshow("img",img) cv2.waitKey()

其中size是圖像的尺寸,修改之后圖像的大小發(fā)生變化,3即三個(gè)色彩通道
randint中0,256值隨機(jī)生成的范圍

訪問彩色圖像并對(duì)像素進(jìn)行修改訪問:

for i in range(0,100):for j in range(0,100):for k in range(0,3):img.itemset((i,j,k),255)

ROI感興趣區(qū)域

獲取局部區(qū)域:

import cv2 import numpy as np a = cv2.imread("hammer.png",,cv2.IMREAD_UNCHANGED) face = a[100:600,100:350] cv2.imshow("face",face) cv2.waitKey()

通道拆分

通過索引的方式,可以直接將各個(gè)通道從圖像內(nèi)提取出來,演示通道拆分的代碼:

import cv2img = cv2.imread("p7.jpg",cv2.IMREAD_UNCHANGED) a = img[:,:,0] b = img[:,:,1] c = img[:,:,2] cv2.imshow("a",a) cv2.imshow("b",b) cv2.imshow("c",c) img[:,:,0] = 0 cv2.imshow("ii",img) img[:,:,1] = 0 cv2.imshow("i2",img) img[:,:,2] = 0 cv2.imshow("i3",img) cv2.waitKey()

結(jié)果:

通過函數(shù)拆分:
cv2.split函數(shù)可以拆分圖像的通道,如:
b,g,r = cv2.split(img)
通過函數(shù)合并:
cv2.merge()可以合并三個(gè)通道為一副彩色圖像,其中合并順序?qū)D像效果有影響

b,g,r = cv2.split(img) bgr = cv2.merge([b,g,r]) rgb = cv2.merge([r,g,b])

將BGR圖像轉(zhuǎn)化為HSV類型的圖像并獲得卡通效果:
代碼

img = cv2.imread("p7.jpg",cv2.IMREAD_UNCHANGED) hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) h,s,v = cv2.split(hsv) v[:,:] = 255 newhsv = cv2.merge([h,s,v]) cv2.imshow("new",newhsv) cv2.waitKey()


改變了V通道的值。HSV模式中S V通道的取值一般是[100,255]

alpha通道

RGB色彩空間三個(gè)通道的基礎(chǔ)上還可以加一個(gè)A通道,表示透明度,這種四個(gè)通道的色彩空間被稱為RGBA色彩空間,PNG是一種典型的4通道圖像。alpha通道的賦值范圍是[0,1]或者[0,255]表示從透明到不透明。
(img,cv2.COLOR_BGR2BGRA)將img從BGR色彩空間轉(zhuǎn)換到BGRA色彩空間。在轉(zhuǎn)換后的BGRA色彩空間中,A是alpha通道,默認(rèn)值為255。

bgra = cv2.cvtColor(img,cv2.COLOR_BGR2BGRA) b,g,r,a = cv2.split(bgra) a[:,:]=125 bgra = cv2.merge([b,g,r,a]) cv2.imshow("bgra",bgra)

注意bgra = cv2.merge([b,g,r,a])中的括號(hào)不能省略
看上去的圖像跟原圖無差別

一些圖像屬性:

shape :如果是彩色圖像,則返回包含行 列 通道數(shù)的數(shù)組,如果是二值圖像或者灰度圖像,則僅僅返回行列數(shù),這個(gè)可以判斷一個(gè)圖像是彩色圖像還是灰度圖像
size:返回圖像的像素?cái)?shù)目

總結(jié)

以上是生活随笔為你收集整理的【笔记】opencv的python实现·像素处理 像素访问 alpha通道的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。