如何使我的彩色物体检测和跟踪程序更有效?

时间:2014-08-29 22:17:36

标签: opencv image-processing computer-vision

首先,感谢所有stackoverflow用户的帮助。对此,我真的非常感激。
所以,我做了一个彩色物体检测程序。我能够控制鼠标点击甚至在MS涂料中涂抹一些东西。

现在,我必须在我的大学工程设计竞赛中展示我的作品。我需要让我的计划更有效。首先,我用来跟踪和移动的对象是一个红色的对象,我通过调整HSV值过滤掉周围的颜色。
但是,当我在不同的环境中尝试我的代码时,我看到了一些问题。周围有许多红色的物体,我的程序正在检测这些物体并给我错误的价值。

所以,我的目标是: - 我必须使我的程序几乎在所有环境中工作,并使程序独立于后台。我的程序应该只跟踪和检测我想要的对象。从那以后,我是大一新生,我的知识有限。所以,我想从stackoverflow专家那里得到一些建议。谢谢。请不要像我想要的那样理解源代码并纠正我的错误。

2 个答案:

答案 0 :(得分:0)

假设您有二进制图像作为颜色过滤的输出,那么:

  1. 使用findContours() - 函数(http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#findcontours)来提取对象。你可以得到所有红色物体的轮廓,包括你的可乐帽。
  2. 现在你必须区分你的可乐帽和其他红色物体。在您的情况下,使用形状特征(如您所提到的)和对象的圆形度(帽子是圆形的)是合适的。:

  3. 总而言之,使用对象的区域对象的圆形功能来区分其他红色对象的焦炭上限。

答案 1 :(得分:0)

为了减少噪音(错误检测的数量),您可以尝试使用双阈值(我可能错了,但我认为它被称为滞后阈值处理,Canny边缘检测器中使用的方法):

  1. 你需要创建2个图像,一个阈值t1 = 50,另一个t2 = 150(你可以调整参数以获得更稳定的性能,即启发式找到最佳值)。

  2. 对于t2中的每个非黑色像素(x,y):floodFill t1,灰色位于(x,y),floodFill t2黑色位于(x,y)

  3. 完成后擦除t1中的所有非灰色像素。

  4. 现在t1应该对彩球的可能位置进行很好的可能性估计。

    注意:阈值处理不会意味着你必须使用opencv" threshold"功能。您可以自己编写一个颜色和颜色将在其中传递的范围作为输入。

    如果您只寻找一个球,只需使用findContours功能查找最大区域的轮廓。

    不要试图达到100%的表现,记住:"完美是好的敌人" - Arisotle。