【笔记】opencv的python实现·像素处理 像素访问 alpha通道
像素概念
計算機在處理某個圖像時,會首先將其劃分為一個個小方塊,每個小方塊是一個獨立的處理單位,成為像素點
記錄一些基礎(chǔ)語法:
,X[:,0]就是取矩陣X的所有行的第0列的元素,X[:,1] 就是取所有行的第1列的元素
python中的小括號( ):代表tuple元組數(shù)據(jù)類型,元組是一種不可變序列。
python中的中括號[ ],代表list列表數(shù)據(jù)類型
大括號{ }花括號:代表dict字典數(shù)據(jù)類型
彩色圖像的讀取
RGB模式的彩色圖像在讀入OPENCV進行處理時會按照行方向依次讀取該RGB圖像的B通道 G通道 R通道的像素點,并將像素點以行為單位存儲在ndarray的列中
可以用image[0,0,0]訪問圖像image的B通道內(nèi)第0行第0列上的像素點,第一個索引表示第0行,第二個索引為第0列,第三個索引為顏色通道
image[0,0,1] 訪問第0行第0列第一個通道的像素值 如果圖像是BGR格式,第一個通道是G通道,第0個通道是B通道
使用Numpy生成三維數(shù)組,用來觀察三個通道值得到變化情況:
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.
可以生成一個元素都是0的數(shù)組
例子:
自定義類型:
>>> 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] 其中冒號表示范圍 即0到第100列
img=np.zeros((2,4,3),dtype=np.unit8) 生成一個243大小的數(shù)組,對應(yīng)一個2行4列3個通道的BGR圖像 img[0,3]:會訪問第0行第3列位置上的B通道G通道R通道三個像素點 img[1,2,2]訪問第1行第2列第2個通道的像素點
執(zhí)行下面語句:
輸出[244 244 78]
像素訪問
numpy.array提供了item()和itemset()函數(shù)來訪問和修改像素值,item可以更加高效地訪問圖像的像素點,itemset:修改像素值,語法格式為itemset(索引值,新值)
函數(shù)item訪問RGB模式圖像的像素時,語法格式為item(行,列,通道) 通道不能省略
隨機生成一副彩色圖像:
其中size是圖像的尺寸,修改之后圖像的大小發(fā)生變化,3即三個色彩通道
randint中0,256值隨機生成的范圍
訪問彩色圖像并對像素進行修改訪問:
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()通道拆分
通過索引的方式,可以直接將各個通道從圖像內(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()可以合并三個通道為一副彩色圖像,其中合并順序?qū)D像效果有影響
將BGR圖像轉(zhuǎn)化為HSV類型的圖像并獲得卡通效果:
代碼
改變了V通道的值。HSV模式中S V通道的取值一般是[100,255]
alpha通道
RGB色彩空間三個通道的基礎(chǔ)上還可以加一個A通道,表示透明度,這種四個通道的色彩空間被稱為RGBA色彩空間,PNG是一種典型的4通道圖像。alpha通道的賦值范圍是[0,1]或者[0,255]表示從透明到不透明。
(img,cv2.COLOR_BGR2BGRA)將img從BGR色彩空間轉(zhuǎn)換到BGRA色彩空間。在轉(zhuǎn)換后的BGRA色彩空間中,A是alpha通道,默認值為255。
注意bgra = cv2.merge([b,g,r,a])中的括號不能省略
看上去的圖像跟原圖無差別
一些圖像屬性:
shape :如果是彩色圖像,則返回包含行 列 通道數(shù)的數(shù)組,如果是二值圖像或者灰度圖像,則僅僅返回行列數(shù),這個可以判斷一個圖像是彩色圖像還是灰度圖像
size:返回圖像的像素數(shù)目
總結(jié)
以上是生活随笔為你收集整理的【笔记】opencv的python实现·像素处理 像素访问 alpha通道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis-plus代码生成器使用和
- 下一篇: 【笔记】opencv图像轮廓 获得平均灰