我试图检测视频中的白色物体。第一步是过滤图像,使其仅保留白色像素。我的第一种方法是使用HSV色彩空间,然后检查高级别的VAL通道。以下是代码:什么是检测白色的最佳方法?
//convert image to hsv
cvCvtColor(src, hsv, CV_BGR2HSV);
cvCvtPixToPlane(hsv, h_plane, s_plane, v_plane, 0);
for(int x=0;x<srcSize.width;x++){
for(int y=0;y<srcSize.height;y++){
uchar * hue=&((uchar*) (h_plane->imageData+h_plane->widthStep*y))[x];
uchar * sat=&((uchar*) (s_plane->imageData+s_plane->widthStep*y))[x];
uchar * val=&((uchar*) (v_plane->imageData+v_plane->widthStep*y))[x];
if((*val>170))
*hue=255;
else
*hue=0;
}
}
将结果留在色相通道中。不幸的是,这种方法对照明非常敏感。我确信有更好的方法。有什么建议么?
我的意思是白色=灰色=没有颜色,实际上我试图检测白色塑料眼镜。这里是一个示例图片: http://tinypic.com/r/14t1p1x/6 – dnul 2010-06-17 21:11:37
我不确定,你是说如果我在顶部放一盏红灯,那么眼镜的颜色会变成某种偏红色而不是寻找白色像素,我应该寻找类似的像素,无论颜色? – dnul 2010-06-17 23:32:52
如果你在场景中有白色物体,并用红光点亮它们,它们将看起来红色!在这种情况下,您将不得不查找“白色”对象的颜色并搜索该颜色 – 2010-06-18 00:02:46