我正在使用OpenCV来检测具有不同背景和光照条件的图像的红色区域:
我主要尝试使用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 。
哪种方法最好?
谢谢!
答案 0 :(得分:2)
RGB几乎总是用于机器视觉的错误色彩空间。 HSV是一个很好的方法 - 你可能需要根据整体亮度调整范围,因为相机的resposne
答案 1 :(得分:1)
我认为最好的方法是训练分类器(神经网络,svm,...),使用颜色分量值作为特征对对象/背景进行分类。它应该与3D点一起工作(R,G,B - 值将是坐标)。对于起点,我建议使用标准的opencv示例points_classifier.cpp(位于examples / cpp文件夹中)。
答案 2 :(得分:1)