1

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

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

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

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

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

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

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

那么我怎样才能让机器人跟随一个物体,无论是通过使用日食的大小还是其他方式呢?

4

1 回答 1

1

似乎您正在寻求一种将物体检测播种到 CamShift 跟踪器中的方法。

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

您将采取的主要步骤是:

  1. inRange(使用颜色阈值隔离对象)
  2. findContours(使用它来查找对象 blob;您可能想要最大的一个,但如果它是圆形的,您也可以按圆形过滤)
  3. 时刻(找到检测到的对象的质心)

或者,您可以将对象质心输入 CamShift 跟踪器,并将上述步骤用作采集模式。

希望对您有所帮助...

于 2012-10-24T00:17:57.670 回答