該系列文章爲 OpenCV+Python Tutorials的學習筆記
代碼託管在Github
轉載請註明: http://blog.csdn.net/a352611/article/details/51416769 [三記的博客]
顏色空間轉換
cv2.cvtColor
- RGB就是指Red,Green和Blue,一副圖像由這三個channel(通道)構成
- Gray就是隻有灰度值一個channel
- HSV即Hue(色調),Saturation(飽和度)和Value(亮度)三個channel
RGB是爲了讓機器更好的顯示圖像,對於人類來說並不直觀,HSV更爲貼近我們的認知,所以通常我們在針對某種顏色做提取時會轉換到HSV顏色空間裏面來處理.
需要注意的是H的取值範圍爲0°~360°,從紅色開始按逆時針方向計算,紅色爲0°,綠色爲120°,藍色爲240°,想提取紅色時需注意取值應爲-10~10(打比方)OpenCV中H的取值範圍爲0~180(8bit存儲時),
例子
提取藍色物體
HSV = cv2.cvtColor(Img, cv2.COLOR_BGR2HSV)
H, S, V = cv2.split(HSV)
LowerBlue = np.array([100, 100, 50])
UpperBlue = np.array([130, 255, 255])
mask = cv2.inRange(HSV, LowerBlue, UpperBlue)
BlueThings = cv2.bitwise_and(Img, Img, mask=mask)
PS:
RGB在OpenCV中存儲爲BGR的順序,數據結構爲一個3D的numpy.array,索引的順序是行,列,通道:
BGRImg = cv2.imread(ImgPath)
B = BGRImg[:, :, 0]
G = BGRImg[:, :, 1]
R = BGRImg[:, :, 2]
也可以使用:
BGRImg = cv2.imread(ImgPath)
B, G, R = cv2.split(BGRImg)
注意,cv2.split的速度比直接索引要慢,但cv2.split返回的是拷貝,直接索引返回的是引用(改變B就會改變BGRImg)
TIPS:本文所有代碼均在/Src/ImageProcessing/ColorSpace/ColorSpaces.py