opencv中的颜色检测

opencv中的颜色检测,opencv,colors,detection,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

我想从实时视频流中检测一种特定的颜色,比如蓝色。 我已经写了下面的代码来显示实时视频流,并将其转换为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;
}
#包括
#包括
使用名称空间cv;
int main(){
Mat图像;
席灰色;
Mat-hsv;
视频捕捉帽;
上限开放(0);
namedWindow(“窗口”,CV\u窗口\u自动调整大小);
namedWindow(“灰色”,CV\u窗口\u自动调整大小);
namedWindow(“hsv”,CV_窗口_自动调整大小);
而(1){
cap>>图像;
CVT颜色(图像、灰色、CV_bgr2灰色);
CVT颜色(图像、hsv、CV_BGR2HSV);
imshow(“窗口”,图像);
imshow(“灰色”,灰色);
imshow(“hsv”,hsv);
waitKey(33);
}
返回0;
}

您可以通过三个步骤完成此操作:

  • 装载框架
  • 将BGR转换为HSV颜色空间
  • 在要检测的颜色范围之间 编辑

    您可以使用它从源图像中查找任何像素的HSV值。您可以看到有关HSV颜色空间的详细说明,从那里下载HSV颜色控制盘并手动查找HSV范围

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

    可以使用以下代码:

    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);     
    
    这是输出:


    请在此处发布之前尝试在线搜索。简单看一下,我发现这个页面解释了OpenCV中的颜色检测:谢谢!我已经看过那个网站了,什么都看不懂,但经过一段时间的阅读,我终于理解了那个网站上的代码。我有一个问题。我可以转换为HSV,但如何准确地找到我的颜色的“inRange”(在图像上可能略有不同)。看看这张图片:非常感谢。它总是经过反复试验吗?我们怎么能说某种颜色介于一个范围之间呢。例如,我使用(3,50,50)和(19240240)作为我的范围。但它会错过一些标记。当我将初始范围更改为(3,70,50)时,检测到更多标记,但一些早期标记消失。我真的不能理解这个概念。顺便说一句,我只是改变了我程序中的范围,而你提到的范围在我的程序中根本不起作用。看来是我的错。它在您使用的图像上非常有效。但看看这些:还有三张类似的照片,其中一张是我用你提到的颜色范围取样的,结果很好,但并不完美。问题是我正在对视频进行采样,在一些图像中,我采集了所有65个标记,但在一些图像中,我只采集了64个标记。
    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);