2011-02-24 79 views
0

我试图从架空摄像头跟踪机器人的位置。但是,由于我对机器人或环境的访问不多,因此我一直在使用网络摄像头的快照。
该机器人具有5个明亮的LED定位策略,与机器人和环境颜色不同,从而易于隔离。
我已经能够做到这一点使用EmguCV,导致像下面的二进制图像。我现在的问题是,如何获得五个斑点的位置并使用这些位置来确定机器人的位置和方向?如何使用EmguCV检测小块?

我一直在尝试与Emgu.CV.VideoSurveillance.BlobTrackerAuto类,但它顽固地拒绝检测上述图像中的斑点。当谈到其中的任何一点时,作为一个新手,我不知道我会做错什么。
那么在上面的图片中获取斑点位置的最佳方法是什么?

回答

2

我不能告诉你如何用emgucv来做,特别是你需要将呼叫从opencv转换为emgucv。你会使用cv::findContours来获得斑点和cv::moments来获得斑点的位置(获得斑点中点的公式是在cv::moments的文档中)。然后,您将使用cv::estimateRigidTransform获取机器人的位置和方向。

+0

这对我帮助很大,谢谢。 不幸的是,我似乎无法找到一个emguCV模拟器来估计刚转换,并且不知道如何调用它...我会继续寻找,但到目前为止,您已经帮助我堆积如山。 – 2011-02-25 04:23:59

+1

@death_au:当你拥有5个职位时,不应该太难自己去获取职位和方向。确定具有3个点的线的中点,使用其他4个点的平均值作为位置,将从平均值到第5点的方向作为方向。 – etarion 2011-02-26 15:37:06

+0

@death_au:它是'CvInvoke.cvEstimateRigidTransform();'在Emgu中 – asakura89 2012-07-31 06:13:19

0

我使用cvBlob库来工作blob。昨天我用它来检测小斑点并且工作正常。