天天看點

放棄C++,這是推薦使用Python來開發OpenCV的第五個教程!

顔色空間轉換

1、目标

顔色空間轉換,如BGR↔Gray,BGR↔HSV等

追蹤視訊中特定顔色的物體

OpenCV函數:cv2.cvtColor(),cv2.inRange()

2、顔色空間轉換

放棄C++,這是推薦使用Python來開發OpenCV的第五個教程!

cv2.cvtColor()用來進行顔色模型轉換,參數1是要轉換的圖檔,參數2是轉換模式, COLOR_BGR2GRAY表示BGR→Gray,可用下面的代碼顯示所有的轉換模式:

放棄C++,這是推薦使用Python來開發OpenCV的第五個教程!

顔色轉換其實是數學運算,如灰階化最常用的是: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.隻顯示藍色物體

放棄C++,這是推薦使用Python來開發OpenCV的第五個教程!
放棄C++,這是推薦使用Python來開發OpenCV的第五個教程!
放棄C++,這是推薦使用Python來開發OpenCV的第五個教程!

其中,bitwise_and()函數暫時不用管,後面會講到。那藍色的HSV值的上下限lower和upper範圍是怎麼得到的呢?其實很簡單,我們先把标準藍色的BGR值用cvtColor()轉換下:

放棄C++,這是推薦使用Python來開發OpenCV的第五個教程!

結果是[120, 255, 255],是以,我們把藍色的範圍調整成了上面代碼那樣。

經驗之談:Lab顔色空間也經常用來做顔色識别,有興趣的同學可以了解下。

4、小結

cv2.cvtColor()函數用來進行顔色空間轉換,常用BGR↔Gray,BGR↔HSV。

HSV顔色模型常用于顔色識别。要想知道某種顔色在HSV下的值,可以将它的BGR值用cvtColor()轉換得到。

5、練習

嘗試在視訊中同時提取紅色、藍色、綠色的物體。(效果如下)

放棄C++,這是推薦使用Python來開發OpenCV的第五個教程!

引用

本節源碼

http://t.cn/EcHGxG2

Basic Operations on Images

http://t.cn/EcHGCCU