关于camshiftdemo.c的问题

时间:2012-10-22 13:39:37

标签: image-processing robotics c opencv

我正在使用与OpenCV 2.3.1捆绑在一起的camshiftdemo.c程序:

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

我想知道如何使用这个程序来指示机器人跟随选择的对象?我正在尝试进行一项实验,看看它是否可行,但我显然需要稍微调整一下。

camshiftdemo的工作方式是在您选择的对象周围绘制一个红色椭圆(通过鼠标单击它)。当物体移动时,红色椭圆也会移动。如果物体移动得更远,椭圆的尺寸会减小,如果它靠近相机则会增加。

为了指示机器人,我想我会告诉它如果红色日食的大小减少就向前移动,如果它增加则向后移动。如果日食向左移动,机器人将向左移动,如果日食向右移动,机器人将向右移动。

听起来很简单,但是在这段代码中,日食被绘制了?如果物体在10秒内来回移动怎么办?这是否意味着机器人停留在同一个地方(即我应该在机器人运动中引入延迟?)?

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

那么如何通过使用日食的大小或其他方式让机器人跟随一个物体呢?

1 个答案:

答案 0 :(得分:1)

您似乎想要一种方法将对象的检测结果发送到CamShift跟踪器中。

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

您将采取的主要步骤是:

  1. inRange(使用颜色阈值隔离对象)
  2. findContours(用它来查找对象blob;你可能想要最大的一个,但如果它是圆形的话你也可以filter by circularity
  3. moments(找到检测到的物体的质心)
  4. 或者,您可以将对象质心输入CamShift跟踪器,并将上述步骤用作采集模式。

    希望你能找到有用的......