3

我想从实时视频流中检测一种特定的颜色,比如蓝色。我编写了以下代码来显示实时视频流并将其更改为 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;
}
4

1 回答 1

10

您可以分三个步骤执行此操作:

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

编辑

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

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

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);     

这是输出:

在此处输入图像描述

于 2013-10-05T05:05:22.343 回答