当您尝试在 OpenCV 中进行阈值处理时,您是使用 RGB(红色、绿色、蓝色)还是 HSV(色相、饱和度、值)颜色格式?从个人经验来看,我发现 HSV 编码在与 OpenCV 一起用于阈值处理和 cvBlobsLib 用于识别 blob 位置时,在跟踪视频片段中的彩色对象方面要优越得多。
HSV 更容易,因为 HSV 的优点是只需使用单个数字来检测颜色(“色调”),尽管该颜色有多种阴影(从浅到深)的可能性非常大色调。 (颜色的量和颜色的亮度分别由“saturation”和“value”参数处理)。
我使用对 cvInRange() OpenCV API 的调用对 HSV 参考图像 ('imgHSV') 进行阈值化以获得二进制(黑白)图像:
cvInRangeS( imgHSV,
cvScalar( 104, 178, 70 ),
cvScalar( 130, 240, 124 ),
imgThresh );
在上面的示例中,两个 cvScalar 参数是 HSV 值的下限和上限,表示颜色为蓝色的色调。在我自己的实验中,我能够通过抓取我感兴趣的对象的屏幕截图来获得一些合适的最大/最小值,并观察发生的色调/饱和度/亮度值的种类。
可以在blog posting 上找到带有代码示例的更详细说明。