如何在不使用轨迹栏的情况下检测一种颜色(识别一种颜色范围)? 我正试图在该范围内获得所有彩色物体,我正在使用Qt和openCV。
我已使用跟踪栏附加此代码:
CvSeq* find_contour = NULL;
bool isStop = false;
img = cvLoadImage(QFileDialog::getOpenFileName(this, "Ouvrir un fichier", "/../../Fichiers Image", "Image (*.jpg *.bmp *.jpeg)").toStdString().c_str(),3);
if(img == NULL)
{
printf("capture device not found!!");
}
Allocate_imgs();
// creat windows
cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Result", CV_WINDOW_AUTOSIZE);
// To in_rang_filter() MIN , MAX RGB value set
cvCreateTrackbar( "minR","Result",&mR_val, 256,set_RGB);
cvCreateTrackbar( "minG","Result",&mG_val, 256,set_RGB);
cvCreateTrackbar( "minB","Result",&mB_val, 256,set_RGB);
cvCreateTrackbar( "maxR","Result",&MAR_val, 256,set_RGB);
cvCreateTrackbar( "maxG","Result",&MAG_val, 256,set_RGB);
cvCreateTrackbar( "maxB","Result",&MAB_val, 256,set_RGB);
//
cvCvtColor( img, imgHsv, CV_BGR2HSV);//convert the color space
in_rang_filter();
cvShowImage("Capture", img);
cvShowImage("Result", test);
cvWaitKey(0);
cvReleaseImage(&imgResult);
cvReleaseImage(&imgHsv);
cvDestroyAllWindows();
}
void in_rang_filter()
{
IplImage* test=cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
CvScalar min_color = CV_RGB(mR_val,mG_val,mB_val);
CvScalar max_color = CV_RGB(MAR_val,MAG_val,MAB_val);
cvInRangeS(imgHsv, min_color,max_color, imgResult);//search for the color in image
cvCvtColor( imgResult, test,CV_GRAY2RGB);
cvShowImage("Result", test);
cvReleaseImage(&test);
}
void Allocate_imgs()
{
const int w = img->width;
const int h = img->height;
imgResult = cvCreateImage(cvSize(w, h), IPL_DEPTH_8U,1);
imgHsv=cvCreateImage(cvSize(w, h), IPL_DEPTH_8U, 3);
答案 0 :(得分:0)
1)使用cvCvtColor函数将图像转换为HSV颜色空间。
2)拆分HSV平面以分离H,S,V平面。
3)接下来,您需要颜色的H,S,V值,我的意思是该颜色范围内的一系列值。
4)现在使用cvInrangeS函数仅提取该颜色。它将变为白色,所有其他颜色变为黑色。
现在,如果您想要仅检测黄色的代码,请尝试使用此tutorial.