opencv中的颜色检测

时间:2013-10-04 19:41:56

标签: opencv colors detection

我想从实时视频流中检测特定颜色,例如蓝色。 我编写了以下代码,显示实时视频流并将其更改为HSV和灰度。由于我是opencv的新手,我不知道下一步该做什么。

有人可以为我完成检测特定颜色的代码。

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;


int main(){
Mat image;
Mat gray;
Mat hsv;
VideoCapture cap;
cap.open(0);
namedWindow("window", CV_WINDOW_AUTOSIZE);
namedWindow("gray", CV_WINDOW_AUTOSIZE);
namedWindow("hsv", CV_WINDOW_AUTOSIZE);

while (1){
    cap >> image;
    cvtColor(image, gray, CV_BGR2GRAY);
    cvtColor(image, hsv, CV_BGR2HSV);
    imshow("window", image);
    imshow("gray", gray);
    imshow("hsv", hsv);
    waitKey(33);
}
return 0;
}

1 个答案:

答案 0 :(得分:10)

您可以分三步完成:

  1. 加载框架。
  2. 将BGR转换为HSV色彩空间。
  3. Inrange之间要检测的颜色范围。
  4. 修改

    您可以使用此code查找源图像中任何像素的HSV值。你可以看到关于HSV色彩空间here的一个很好的解释,从那里下载HSV色轮并手动找出HSV范围。

    以下范围可用于the comments中提供的图像:

    hsv_min--> (106,60,90)
    hsv_max-->(124,255,255)
    

    可以使用以下代码:

    Mat src=imread("image.jpg");
    Mat HSV;
    Mat threshold;
    
    cvtColor(src,HSV,CV_BGR2HSV);
    inRange(HSV,Scalar(106,60,90),Scalar(124,255,255),threshold);
    imshow("thr",threshold);     
    

    这是输出:

    enter image description here