#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 綠色...