opencv中的颜色检测

BBB*_*BBB 3 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;
}
Run Code Online (Sandbox Code Playgroud)

Har*_*ris 10

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

  1. 加载框架.
  2. 将BGR转换为HSV颜色空间.
  3. Inrange在颜色范围之间进行检测.

编辑

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

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

hsv_min--> (106,60,90)
hsv_max-->(124,255,255)
Run Code Online (Sandbox Code Playgroud)

可以使用以下代码:

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);     
Run Code Online (Sandbox Code Playgroud)

这是输出:

在此输入图像描述