基於Opencv的顏色識別

2021-08-28 10:47:02 字數 1576 閱讀 7678

hsv模型中顏色的引數分別是:色調(h:hue),飽和度(s:saturation),亮度(v:value)。由a. r. smith在2023年建立的一種顏色空間, 也稱六角錐體模型(hexcone model)。

(1)色調(h:hue):用角度度量,取值範圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°。它們的補色是:黃色為60°,青色為180°,品紅為300°;

(2)飽和度(s:saturation):取值範圍為0.0~1.0,值越大,顏色越飽和。

(3)亮度(v:value):取值範圍為0(黑色)~255(白色)

設 (r, g, b) 分別是乙個顏色的紅、綠和藍座標,它們的值是在 0 到 1 之間的實數。設 max 等價於 r, g 和 b 中的最大者。設 min 等於這些值中的最小者。要找到在 hsv 空間中的 (h, s, v) 值,這裡的 h ∈ [0, 360)是角度的色相角,而 s, v ∈ [0,1] 是飽和度和亮度,方法如下:

opencv下有個函式可以直接將rgb模型轉換為hsv模型,opencv中h∈ [0, 180), s ∈ [0, 255], v ∈ [0, 255]。我們知道h分量基本能表示乙個物體的顏色,但是s和v的取值也要在一定範圍內,因為s代表的是h所表示的那個顏色和白色的混合程度,也就說s越小,顏色越發白,也就是越淺;v代表的是h所表示的那個顏色和黑色的混合程度,也就說v越小,顏色越發黑。經過實驗,識別藍色的取值是 h在100到140,s和v都在90到255之間。一些基本的顏色h的取值可以如下設定:

orange 0-22,yellow 22- 38,green 38-75,blue 75-130,violet 130-160,red 160-179

(1) 讀取一張

cvtcolor(imgoriginal, imghsv, color_bgr2hsv);

(2)將彩色影象均衡化 

split(imghsv, hsvsplit);

equalizehist(hsvsplit[2],hsvsplit[2]);

merge(hsvsplit,imghsv);

(3)檢測顏色

inrange(imghsv, scalar(ilowh, ilows, ilowv), scalar(ihighh, ihighs, ihighv), imgthresholded);

(4)進行開操作和閉操作,去除雜訊的影響。

mat element = getstructuringelement(morph_rect, size(5, 5));

morphologyex(imgthresholded, imgthresholded, morph_open, element);

morphologyex(imgthresholded, imgthresholded, morph_close, element);

#include#include#includeusing namespace cv;

using namespace std;

//入口主函式

int main(int argc, char** argv)

} return 0;

}

opencv 顏色識別

include include opencv2 highgui highgui.hpp include opencv2 imgproc imgproc.hpp using namespace cv using namespace std int main int argc,char argv nam...

OpenCV顏色識別

hsv模型中顏色的引數分別是 色調 h hue 飽和度 s saturation 亮度 v value 由a.r.smith在1978年建立的一種顏色空間,也稱六角錐體模型 hexcone model 設 r,g,b 分別是乙個顏色的紅 綠和藍座標,它們的值是在 0 到 1 之間的實數。設 max ...

opencv 顏色物體識別跟蹤

hsv顏色空間與人眼較為接近,一般以hsv為顏色檢測和識別 h 色調 紅 綠 藍 s 飽和度 顏色深淺 v 亮度 顏色亮暗 opencv h範圍 0 180 s 0 255 v 0 255 hsv二值化處理的函式cv exports w void inrange inputarray src,inp...