dnu*_*nul 5 opencv colors image-processing
我正在尝试检测视频中的白色物体.第一步是过滤图像,使其只留下白色像素.我的第一种方法是使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
将结果留在色调通道中.不幸的是,这种方法对照明非常敏感.我相信有更好的方法.有什么建议?
它会对光线敏感——如果你在红光下观看它会发生什么!
我不知道使用 YUV 空间是否比寻找相似的 RGB 值容易得多。
编辑 - 通常你会调用没有颜色的灰色(可能会帮助你进行搜索)。
如果您可以选择,这是最难搜索的颜色,因为它会反射场景中的任何其他照明。因此,您必须检测整体照明颜色并进行调整。
因此,您要寻找的是具有相似 RGB 值的像素,或者场景中对象的 RGB 值平均值的比率。