opencv 在hsv顏色空間識別區域顏色

2021-07-13 18:47:43 字數 3006 閱讀 1062

1. hsv顏色空間簡介

2. 為什麼是hsv

3. 識別方法說明

4. 識別步驟解析(**片段)

4. 檢測結果

由色調(hue)、飽和度(saturation)、亮度(value)三個分量構成,hsv更接近於人眼的主觀感受。我們可以通過下面的圖來展示hsv顏色分布情況:

使用了下面的matlab程式畫出上面的圖形,感興趣的可以**一下。程式很簡單。

% 建立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)。這樣就可以用查詢輪廓的方式,把每個顏色區域標識出來。

image = imread("test4.png", cv_load_image_color);

if (!image.data)

imshow("display image", image);

cvtcolor(image, hsvimg, color_bgr2hsv);

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;

// 查詢指定範圍內的顏色

inrange(hsvimg, hsvlo[coloridx], hsvhi[coloridx], imgthresholded);

// 轉換成二值圖

threshold(imgthresholded, imgthresholded, 1, 255, thresh_binary);

2)將所得的二值影象四邊都增加乙個畫素,再查詢輪廓。這樣做的乙個明顯情況是當影象為純色的時候,整圖只有一種顏色的判斷。當然可能還有各種情況,需要分別判斷。

copymakeborder(imgthresholded, imag_1, 1, 1, 1, 1, border_constant, 0);

vector> contours0;

vectorhierarchy;

3) 檢查所有的輪廓中心點,如果非0,判斷為所需要查詢的顏色區域,用文字標記顏色。如藍色標記為字母『b』。

for (int idx = 0; idx < contours0.size(); 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頂點到原點和白色頂點的中軸線的距離 明暗變化 中軸線的點的位置...