1. hsv顏色空間簡介
2. 為什麼是hsv
3. 識別方法說明
4. 識別步驟解析(**片段)
4. 檢測結果
由色調(hue)、飽和度(saturation)、亮度(value)三個分量構成,hsv更接近於人眼的主觀感受。我們可以通過下面的圖來展示hsv顏色分布情況:
使用了下面的matlab程式畫出上面的圖形,感興趣的可以**一下。程式很簡單。
[plain]
view plain
copy
% 建立hsv分量
hue = repmat(linspace(0,1,100),100,1);
saturation = repmat([linspace(0,1,50) linspace(1,0,50)].',1,100);
value = repmat([ones(1,50) linspace(1,0,50)].',1,100);
% 生成hsv影象
hsvimage = cat(3,hue,saturation,value);
% 轉換成rgb影象
rgbimage = hsv2rgb(hsvimage);
% 構造座標系
theta = linspace(0,2*pi,100);
xcor = [zeros(1,100); cos(theta); zeros(1,100)];
ycor = [zeros(1,100); sin(theta); zeros(1,100)];
zcor = [2.*ones(2,100); zeros(1,100)];
surf(xcor,ycor,zcor,rgbimage,'clipping','on','facecolor','texturemap','edgecolor','none');
axis equal
對於影象而言,識別相應的顏色在rgb空間、hsv空間或者其它顏色空間都是可行的。之所以選擇hsv,是因為h代表的色調基本上可以確定某種顏色,再結合飽和度和亮度資訊判斷大於某乙個閾值(這裡是40到255)。而rgb由三個分量構成,需要判斷每種分量的貢獻比例。比如:r = 200, g = 20, b = 30,可以看到r值很大,所以是紅色,再看gb值相對較小,可以判斷為深紅色。但如果變成:r = 200, g = 190, b = 180,實際上顏色已經接近灰色。
基本原理很簡單,讀入後,首先轉換成hsv顏色空間。然後逐一的判斷每個畫素是否在一定範圍內,並標識出來(是就標識為255,不是就標識為0)。這樣就可以用查詢輪廓的方式,把每個顏色區域標識出來。
[cpp]view plain
copy
image = imread(
"test4.png"
, cv_load_image_color);
if(!image.data)
imshow("display image"
, image);
[cpp]
view plain
copy
cvtcolor(image, hsvimg, color_bgr2hsv);
[cpp]
view plain
copy
enum
colortype;
const
scalar hsvredlo( 0, 40, 40);
const
scalar hsvredhi(40, 255, 255);
const
scalar hsvgreenlo(41, 40, 40);
const
scalar hsvgreenhi(90, 255, 255);
const
scalar hsvbluelo(100, 40, 40);
const
scalar hsvbluehi(140, 255, 255);
vectorhsvlo;
vectorhsvhi;
vectortextcolor;
[cpp]
view plain
copy
// 查詢指定範圍內的顏色
inrange(hsvimg, hsvlo[coloridx], hsvhi[coloridx], imgthresholded);
// 轉換成二值圖
threshold(imgthresholded, imgthresholded, 1, 255, thresh_binary);
2)將所得的二值影象四邊都增加乙個畫素,再查詢輪廓。這樣做的乙個明顯情況是當影象為純色的時候,整圖只有一種顏色的判斷。當然可能還有各種情況,需要分別判斷。
[cpp]
view plain
copy
copymakeborder(imgthresholded, imag_1, 1, 1, 1, 1, border_constant, 0);
vector> contours0;
vectorhierarchy;
3) 檢查所有的輪廓中心點,如果非0,判斷為所需要查詢的顏色區域,用文字標記顏色。如藍色標記為字母『b』。
[cpp]
view plain
copy
for(int
idx = 0; idx
}
用excel畫的顏色圖,圖中可以看到顏色都正確的標識了。第三行不是沒有識別出來,而是字母的顏色與本來的顏色一樣,這裡懶得設定了。
OpenCV中HSV顏色空間
opencv中實現bgr顏色空間想hsv顏色空間轉換的是cvcvtcolor h通道的值範圍為 0 180 s 0 255 v 0 255 後來發現了 cv bgr2hsv full cv bgr2hsv 在轉換影象的時候是將 h 2 h 我們知道影象中色相h的取值範圍為 0 360 所以利用ope...
opencv 在hsv顏色空間識別區域顏色
1.hsv顏色空間簡介 2.為什麼是hsv 3.識別方法說明 4.識別步驟解析 片段 4.檢測結果 由色調 hue 飽和度 saturation 亮度 value 三個分量構成,hsv更接近於人眼的主觀感受。我們可以通過下面的圖來展示hsv顏色分布情況 使用了下面的matlab程式畫出上面的圖形,感...
opencv學習筆記 hsv顏色空間
1.rgb模型。三維座標 原點到白色頂點的中軸線是灰度線,r g b三分量相等,強度可以由三分量的向量表示。用rgb來理解色彩 深淺 明暗變化 色彩變化 三個座標軸rgb最大分量頂點與黃紫青ymc色頂點的連線 深淺變化 rgb頂點和cmy頂點到原點和白色頂點的中軸線的距離 明暗變化 中軸線的點的位置...