我正在使用OpenCV 2.3.1附带的camshiftdemo.c程序:

https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/camshiftdemo.c?rev=1429

我想知道如何使用该程序指示机器人跟随所选对象吗?我正在尝试进行实验,看看它是否可以工作,但显然我需要对其进行一些调整。

camshiftdemo的工作方式是在您选择的对象周围绘制红色椭圆(通过用鼠标单击它)。随着对象移动,红色椭圆也会移动。如果对象移得更远,则椭圆的大小会减小,如果更靠近相机,则椭圆会增大。

为了指导机器人,我想我告诉我如果红 eclipse 的大小减小则向前移动,如果红 eclipse 的大小增大则向后移动。如果 eclipse 向左移动,则机器人将向左移动;如果 eclipse 向右移动,则机器人将向右移动。

听起来很简单,但是在这段代码中的哪里绘制了 eclipse ?如果物体在10秒钟内来回移动怎么办?这是否意味着机器人会停留在同一位置(即,我是否应该延迟机器人的运动?)?

我的目标是获取camshiftdemo.c代码,以指示机器人{向前,向后,向左转,向右转}移动。

那么,如何通过使用 eclipse 的大小或其他方式使机器人跟随对象呢?

最佳答案

似乎您正在寻找一种方法来将检测到的对象植入CamShift跟踪器。

根据您的机器人具有的处理能力,您可能需要考虑一种更简单的方法。如果您可以选择所需的目标,我会选择网球之类的东西,因为它们是一种非常明亮且独特的颜色。现在,您的对象具有已知的颜色签名,您可以使用轮廓处理相当简单地对其进行跟踪。另外,如果决定使用颜色跟踪,请考虑切换到HSV或YCbCr之类的颜色空间。这将使颜色检测对强度变化不太敏感。 Here是我在OpenCV中有关颜色隔离的较早的帖子之一。

您将要采取的主要步骤是:

  • inRange(使用颜色阈值隔离对象)
  • findContours(使用它来查找对象blob;您可能想要最大的对象,但是如果它是圆形的,也可以filter by circularity)
  • moments(查找检测到的对象的质心)

  • (可选)您可以将对象质心输入到CamShift跟踪器中,而仅将上述步骤用作获取模式。

    希望对您有所帮助...

    关于image-processing - 关于camshiftdemo.c的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13017003/

    10-10 19:02