1. 程式人生 > >【opencv+python】影象處理之一、顏色空間RGB,Gray與HSV

【opencv+python】影象處理之一、顏色空間RGB,Gray與HSV

顏色空間轉換

  • RGB就是指Red,Green和Blue,一副影象由這三個channel(通道)構成
  • Gray就是隻有灰度值一個channel
  • HSV即Hue(色調),Saturation(飽和度)和Value(亮度)三個channel

RGB是為了讓機器更好的顯示影象,對於人類來說並不直觀,HSV更為貼近我們的認知,所以通常我們在針對某種顏色做提取時會轉換到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)