具有相似颜色背景的OpenCV颜色检测

时间:2014-09-19 21:31:34

标签: c++ opencv

我正在使用OpenCV来检测具有不同背景和光照条件的图像的红色区域:

A)理想条件:

enter image description here

B)类似的颜色背景:

enter image description here

C)低光照:

enter image description here

我主要尝试使用inRange。首先在BGR颜色空间中,通过提取最小红色值约为200的像素。这在 A B 中有效,但在 C <(低光)。我尝试将图片转换为HSV并为红色执行inRange(从here借用):

Mat imgThresholded;
Mat imageHSV;
cvtColor(src, imageHSV, CV_BGR2HSV);

int iLowH = 0;
int iHighH = 50;

int iLowS = 100;
int iHighS = 255;

int iLowV = 80;
int iHighV = 255;

inRange(imageHSV,
        Scalar(iLowH, iLowS, iLowV),
        Scalar(iHighH, iHighS, iHighV),
        imgThresholded);

return imgThresholded;

适用于 A C ,但不适用于 B

哪种方法最好?

谢谢!

3 个答案:

答案 0 :(得分:2)

RGB几乎总是用于机器视觉的错误色彩空间。 HSV是一个很好的方法 - 你可能需要根据整体亮度调整范围,因为相机的resposne

答案 1 :(得分:1)

我认为最好的方法是训练分类器(神经网络,svm,...),使用颜色分量值作为特征对对象/背景进行分类。它应该与3D点一起工作(R,G,B - 值将是坐标)。对于起点,我建议使用标准的opencv示例points_classifier.cpp(位于examples / cpp文件夹中)。

答案 2 :(得分:1)

恕我直言,你应该添加除色彩之外的更多推理。颜色是最基本的(但它可以作为第一步使用)和有限类型的对象识别工具,因为无法保证背景中的任何内容都没有相似的颜色。例如,添加图像分割link或形状检测link