opencv 顏色識別

2021-07-13 17:39:48 字數 2543 閱讀 3010

#include

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;

using namespace std;

int main(int argc, char** argv)

namedwindow("control", cv_window_autosize); //建立視窗

int ilowh = 90;

int ihighh = 100;

int ilows = 0; 

int ihighs = 255;

int ilowv = 255;

int ihighv = 255;

//建立控制條

cvcreatetrackbar("lowh", "control", &ilowh, 179); //hue (0 - 179)

cvcreatetrackbar("highh", "control", &ihighh, 179);

cvcreatetrackbar("lows", "control", &ilows, 255); //saturation (0 - 255)

cvcreatetrackbar("highs", "control", &ihighs, 255);

cvcreatetrackbar("lowv", "control", &ilowv, 255); //value (0 - 255)

cvcreatetrackbar("highv", "control", &ihighv, 255);

while (true)

mat imghsv;

vectorhsvsplit;

cvtcolor(imgoriginal, imghsv, color_bgr2hsv); //顏色空間轉換 bgr to hsv

//因為我們讀取的是彩色圖,直方圖均衡化需要在hsv空間做

split(imghsv, hsvsplit); //分離通道到hsvsplit(h s v)

equalizehist(hsvsplit[2], hsvsplit[2]);//直方圖均衡化,增加對比度,使亮的更亮,暗的更暗

merge(hsvsplit, imghsv);//通道合成,將多個通道合成到乙個mat中

mat imgthresholded;

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

//檢測imghsv影象的每乙個畫素是不是在scalar(ilowh, ilows, ilowv)和scalar(ihighh, ihighs, ihighv)之間,

//如果是,這個畫素就設定為255,並儲存在imgthresholded影象中,否則為0

//scalar結構體是賦初值的,如scalar(ilowh, ilows, ilowv)則表示有三通道,第乙個通道為ilowh,第二個通道為ilows,第三個通道為ilowv

//開操作 (去除一些噪點)

mat element = getstructuringelement(morph_rect, size(5, 5));//獲取常用的結構元素的形狀:矩形(包括線形)、橢圓(包括圓形)及十字形。

//morph_rect, morph_ellipse, morph_cross

morphologyex(imgthresholded, imgthresholded, morph_open, element);

//morphologyex的內部實現都是呼叫腐蝕erode與膨脹dilate函式。

//閉操作 (連線一些連通域)

morphologyex(imgthresholded, imgthresholded, morph_close, element);

imshow("thresholded image", imgthresholded); //showthe thresholded image

imshow("original", imgoriginal); //show the original image

char key = (char)waitkey(30);

if (key == 27)

break;

}return 0;

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之間。

orange  0-22

yellow 22- 38

green 38-75

blue 75-130

violet 130-160

red 160-179

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...

基於Opencv的顏色識別

hsv模型中顏色的引數分別是 色調 h hue 飽和度 s saturation 亮度 v value 由a.r.smith在1978年建立的一種顏色空間,也稱六角錐體模型 hexcone model 1 色調 h hue 用角度度量,取值範圍為0 360 從紅色開始按逆時針方向計算,紅色為0 綠色...