我想计算我的相机和识别的“物体”之间的距离。例如,识别的“对象”是白板上的黑色矩形贴纸。我知道矩形 (x,y) 的值。
有没有一种方法可以用我的原始矩形的值和我用相机拍摄的矩形图片的值来计算距离?
我在论坛中搜索了答案,但没有一个被指定来计算这些属性的距离。
我正在研究 Aldebaran Robotics 的一个名为 Nao 的机器人,我打算使用 OpenCV 来识别黑色矩形。
我想计算我的相机和识别的“物体”之间的距离。例如,识别的“对象”是白板上的黑色矩形贴纸。我知道矩形 (x,y) 的值。
有没有一种方法可以用我的原始矩形的值和我用相机拍摄的矩形图片的值来计算距离?
我在论坛中搜索了答案,但没有一个被指定来计算这些属性的距离。
我正在研究 Aldebaran Robotics 的一个名为 Nao 的机器人,我打算使用 OpenCV 来识别黑色矩形。
如果您可以计算目标图像所占据的角度,那么到目标的距离应该与该角度的cot
(即1/tan
)成比例。您应该会发现图像中的像素数大致对应于角度,但我怀疑它是否完全是线性的,尤其是近距离。
您的相机镜头的行为可能会影响此测量,因此这将取决于您的确切设置。
为什么不在几个距离测量目标的大小,并绘制散点图?然后,您可以将曲线拟合到数据中,以获得特定系统的 size->distance 函数。如果您的相机接近“理想”相机,那么您应该会发现此图看起来像cot
,并且您应该能够找到a
和的值b
来匹配dist = a * cot (b * width)
。
如果您尝试这个实验,为什么不在这里发布答案,让其他人从中受益?
[编辑:关于“理想”相机的说明]
为了让相机图像对我们来说看起来“真实”,图像应该近似投影到眼睛前面的平面上(因为我们通过将平面图像放在眼睛前面来查看相机图像)。想象一下,在您的眼前举起一张描图纸,然后在纸上勾勒出物体的轮廓。此页面上的第二张图显示了我的意思。您可以将实现这一目标的相机描述为“理想”相机。
当然,在现实生活中,相机不是通过描图纸工作的,而是通过镜头工作的。很复杂的镜头。看看这个页面上的镜头图。由于各种原因,您可能会花费一生的时间来学习,因此要创建一个与描图纸示例在所有条件下都可以工作的镜头完全相同是非常棘手的。从这个 wiki 页面开始,如果您想了解更多信息,请继续阅读。
因此,您不太可能计算出像素长度和距离之间的精确关系:您应该测量它并拟合曲线。
这是一个很大的话题。如果您想从单个图像开始,请查看 A. Criminisi 的这篇旧论文。如需深入了解,请阅读他的博士学位。论文。然后开始使用“投影几何”部分中的 OpenCV 例程。
我也一直在研究图像/对象识别。我刚刚发布了一个 python 编程的 android 应用程序(移植到 android),它可以识别物体、人、汽车、书籍、徽标、树木、花朵......任何东西:) 它还显示了它“思考”的思维过程 :) 我已经把它作为 99 美分在 google play 上的测试。如果您有兴趣,请点击此处的链接,还有一段视频正在播放:https: //play.google.com/store/apps/details?id=com.davecote.androideyes
享受!:)