【opencv】目標識別——HSV顏色識別 | opencv色調
首先解釋為什麼不在RGB中設定範圍尋找物體資訊,而是在HSV中:因為RGB通道並不能很好地反映出物體具體的顏色資訊,而相對於RGB空間,HSV空間能夠非常直觀的表達色彩的明暗,色調,以及鮮豔程度,方便進行顏色之間的對比,比如紅色在HSV空間中H維度的範圍為0~10和160~180你跟我說在RGB中它的範圍是什麼呢?下面是通過實驗計算的模糊範圍(準確的範圍在網上都沒有給出)。H: 0 — 180S: 0 — 255V: 0 — 255在HSV空間各種顏色的範圍圖來自:http://blog.csdn.net/taily_duan/article/details/51506776但是這個範圍相對我們要尋找或者識別的...
首先解釋為什麼不在RGB中設定範圍尋找物體資訊,而是在HSV中:
因為RGB通道並不能很好地反映出物體具體的顏色資訊 , 而相對於RGB空間,HSV空間能夠非常直觀的表達色彩的明暗,色調,以及鮮豔程度,方便進行顏色之間的對比,比如紅色在HSV空間中H維度的範圍為0~10和160~180 你跟我說在RGB中它的範圍是什麼呢?
下面是通過實驗計算的模糊範圍(準確的範圍在網上都沒有給出)。
H: 0 — 180
S: 0 — 255
V: 0 — 255
在HSV空間各種顏色的範圍
圖來自:http://blog.csdn.net/taily_duan/article/details/51506776
但是這個範圍相對我們要尋找或者識別的物體還是太大,容易誤判,因此我們需要藉助PS尋找更精確的範圍
點選吸管工具那個圖示,選擇HSB顏色
但是HSV顏色空間卻規定的是,H範圍0~360,S範圍0~1,V範圍0~1
PS中的HSV範圍,H是0-360,S是0-1,V(B)是0-1
opencv中的HSV範圍,H是0-180,S是0-255,V是0-255
因此需要轉換一下
把PS中H的值除以2,S乘255,V乘255,可以得到對應的opencv的HSV值
在PS中某個物體上移動滑鼠,可以大致看出物體顏色的HSV三個分量的範圍,用這三個範圍來識別物體
識別程式碼如下:
void hsvreg() { Mat img = imread("藍色筆筒.jpg",1); Mat imgHSV; //藍色筆筒顏色的HSV範圍 int iLowH = 100 /2; int iHighH = 120 /2; int iLowS = 50 *255/100; int iHighS = 70 *255/100; int iLowV = 40 *255/100; int iHighV = 50 *255/100; cvtColor(img, imgHSV, COLOR_BGR2HSV);//轉為HSV imwrite("hsv.jpg",imgHSV); Ma...