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

歡迎訪問 生活随笔!

生活随笔

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

python

python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离

發(fā)布時(shí)間:2024/7/23 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

圖像像素的訪問、通道的合并與分離

(一)像素訪問

在第一篇博客中,向大家介紹了,所謂的圖像在計(jì)算機(jī)看來就是一個(gè)矩陣,對于RGB圖像矩陣一共有三層,分別代表著RGB通道,矩陣中每一個(gè)數(shù)的大小代表著不同通道的亮度,范圍在0~255之間。

訪問圖像的像素,就如同對矩陣元素的訪問,很好理解。

print(img[0][0][0])

輸出為:

34

也可以對所讀取的圖像矩陣的像素進(jìn)行賦值

for i in range(400):for j in range(400):for k in range(3):img[i][j][k] = 255

顯示圖像為:


可以看到上圖左上角形成了400x400像素的白色區(qū)域。

利用這個(gè)圖像矩陣的特點(diǎn),我們還可以做一些有趣的事情。比如說,椒鹽現(xiàn)象。

我們需要先寫一個(gè)椒鹽函數(shù),將我們想要的像素隨機(jī)的分布在圖像上。

def salt(img, numbers):for x in range(numbers):i = np.random.randint(img.shape[0])j = np.random.randint(img.shape[1])for k in range(3):img[i][j][k] = 255return img

嘿嘿,先來上1000個(gè)點(diǎn)!

img = salt(img, 1000)

圖像顯示為:


(二)通道分離

對于RGB圖像,擁有RGB三原色通道,從矩陣的角度來講,可以理解為三層矩陣,也就是三維的矩陣,每一層代表著一個(gè)通道。將圖片進(jìn)行通道分離可以使用OpenCV里的split函數(shù),也可以通過numpy庫對圖像矩陣進(jìn)行直接操作。圖像展示的是不同通道的256級(jí)灰度圖。

b, g, r = cv2.split(img)cv2.namedWindow('Blue') cv2.imshow('Blue', b) cv2.waitKey(0)cv2.namedWindow('Green') cv2.imshow('Green', g) cv2.waitKey(0)cv2.namedWindow('Red') cv2.imshow('Red', r) cv2.waitKey(0)



如果單獨(dú)保留一個(gè)通道,并且令其它通道的圖像矩陣的值全為零,將會(huì)變得更加好看,特意找了一個(gè)小的圖片,避免篇幅過長。

img = cv2.imread('tongren.jpg') b, g, r = cv2.split(img)pic = np.zeros(np.shape(img), np.uint8) pic[:, :, 0] = b cv2.namedWindow('Blue') cv2.imshow('Blue', pic) cv2.waitKey(0)pic = np.zeros(np.shape(img), np.uint8) pic[:, :, 1] = g cv2.namedWindow('Green') cv2.imshow('Green', pic) cv2.waitKey(0)pic = np.zeros(np.shape(img), np.uint8) pic[:, :, 2] = r cv2.namedWindow('Red') cv2.imshow('Red', pic) cv2.waitKey(0)cv2.destroyAllWindows()


也可以任選兩個(gè)通道進(jìn)行拼接。

pic = np.zeros(np.shape(img), np.uint8) pic[:, :, 0] = b pic[:, :, 1] = g cv2.namedWindow('Blue-Green') cv2.imshow('Blue-Green', pic) cv2.waitKey(0)pic = np.zeros(np.shape(img), np.uint8) pic[:, :, 0] = b pic[:, :, 2] = r cv2.namedWindow('Blue-Red') cv2.imshow('Blue-Red', pic) cv2.waitKey(0)pic = np.zeros(np.shape(img), np.uint8) pic[:, :, 1] = g pic[:, :, 2] = r cv2.namedWindow('Green-Red') cv2.imshow('Green-Red', pic) cv2.waitKey(0)cv2.destroyAllWindows()


(三)通道合并

通道合并經(jīng)常用的有兩種方法

第一個(gè)是:OpenCV中自帶的函數(shù)megre

megre = cv2.merge([b, g, r])

第二個(gè)是:numpy模塊中的dstack,深度拼接函數(shù)

dstack = np.dstack([b, g, r])

但這兩種拼接方式是不一樣的,這一點(diǎn)一定要注意。pandas中也有對矩陣的拼接操作也可實(shí)現(xiàn)np.dstack()相同的效果,這里就不介紹了。

總結(jié)

以上是生活随笔為你收集整理的python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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