顔色空間轉換
1、目标
顔色空間轉換,如BGR↔Gray,BGR↔HSV等
追蹤視訊中特定顔色的物體
OpenCV函數:cv2.cvtColor(),cv2.inRange()
2、顔色空間轉換

cv2.cvtColor()用來進行顔色模型轉換,參數1是要轉換的圖檔,參數2是轉換模式, COLOR_BGR2GRAY表示BGR→Gray,可用下面的代碼顯示所有的轉換模式:
顔色轉換其實是數學運算,如灰階化最常用的是:gray=R0.299+G0.587+B*0.114。
03
視訊中特定顔色物體追蹤
HSV是一個常用于顔色識别的模型,相比BGR更易區分顔色,轉換模式用COLOR_BGR2HSV表示。
經驗之談:OpenCV中色調H範圍為[0,179],飽和度S是[0,255],明度V是[0,255]。雖然H的理論數值是0°~360°,但8位圖像像素點的最大值是255,是以OpenCV中除以了2,某些軟體可能使用不同的尺度表示,是以同其他軟體混用時,記得歸一化。
現在,我們實作一個使用HSV來隻顯示視訊中藍色物體的例子,步驟如下:
1.捕獲視訊中的一幀
2.從BGR轉換到HSV
3.提取藍色範圍的物體
4.隻顯示藍色物體
其中,bitwise_and()函數暫時不用管,後面會講到。那藍色的HSV值的上下限lower和upper範圍是怎麼得到的呢?其實很簡單,我們先把标準藍色的BGR值用cvtColor()轉換下:
結果是[120, 255, 255],是以,我們把藍色的範圍調整成了上面代碼那樣。
經驗之談:Lab顔色空間也經常用來做顔色識别,有興趣的同學可以了解下。
4、小結
cv2.cvtColor()函數用來進行顔色空間轉換,常用BGR↔Gray,BGR↔HSV。
HSV顔色模型常用于顔色識别。要想知道某種顔色在HSV下的值,可以将它的BGR值用cvtColor()轉換得到。
5、練習
嘗試在視訊中同時提取紅色、藍色、綠色的物體。(效果如下)
引用
本節源碼
http://t.cn/EcHGxG2
Basic Operations on Images
http://t.cn/EcHGCCU