這篇文章是要介紹下面幾個技巧。
- 像素(畫素)取得及更改方式
- 圖像情報取得(shape, channel, 圖像的data型, size(像素數量))
- 圖像顏色分割與組合
取得像素與更改像素資訊
首先我們先來讀取一張彩色照片。
import numpy as np
import cv2
img = cv2.imread('messi.jpeg')

接著只要指定想要取得的像素的座標就可以了。如果是彩色的圖片的話可以取得BGR的像素成分,如果是黑白照片的話可以取得他的明亮度。
px = img[88, 99]
print(px) #[32, 31, 47]
# 只取得藍色
blue = img[88, 99, 0] # []中的第0項
print(blue) # 32
另外,只要用相同的方式就可以改變該像素的成分。
img[88, 99] = [255, 255, 255]
print(img[88, 99]) #[255, 255, 255]
除了上述的方式之外,還可以使用numpy中的item()來取得像素值,並且用itemset()來改變像素值,如果有興趣的話可以看看下面的code。
#取得紅色值
px = img.item(88, 99, 2)
print(px)
#更改紅色像素值
img.itemset((88, 99, 2), 211)
px = img.item(88, 99, 2)
print(px)
取得圖像情報
在這邊我們會學到如何取得圖像的情報,這裡指的情報是shape, channel, size(總像素數), 像素等等。
圖像的形狀可以透過img.shape()來取得,會return行數,列數以及channel數(如果是彩色圖像時)的turple圖像的形狀可以透過img.shape()來取得,會return行數,列數以及channel數(如果是彩色圖像時)的tuple。
print(img.shape) # (342, 548, 3)
另外,如果是黑白圖像時他不會return一個tuple值,只會return行數跟列數。因此這也是用來判斷圖像是不是黑白圖像的方式。
總像素數的話可以用img.size()來查詢。
print(img.size())
# 562248
圖像的data type則是可以用img.dtype來查詢。
print(img.dtype())
# unit8
顏色分割與組合
如果有必要的話可以將圖像的藍,綠,紅的成分分割,另外也可以將分割的顏色再組合起來。
b, g, r = cv2.split(img) #顏色分割
img = cv2.merge((b, r, g)) #顏色組合
或是也可以像下面這樣只取出特定的顏色。
b = img[:, :, 0] # 藍色
在這邊要注意的是cv2不是拿來計算的library,因此在處理cv2.split()的計算時會需要很龐大的時間,如果不是必要的話不推薦使用。Numpy的話在計算方面比較有效率,如果可能的話可以用Numpy。
留言