找到一个摄像机和一个对象之间的距离,使用opencv知道对象的尺寸

时间:2015-03-12 14:58:24

标签: opencv

我正在研究机器人手臂,并试图找到一个相机和一个物体之间的距离,使用开放式CV知道物体的尺寸。

我不知道该怎么做。

我尝试使用visual servoing方法,但没有成功。

任何帮助都会很好

1 个答案:

答案 0 :(得分:0)

这是一个简单的解决方案:

1。)首先,您必须校准相机以接收C矩阵。例如:

http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html

2。)然后你必须在图像上识别出距离已知的物体的两个点。我们可以在3D空间中使用这些点P1(X1, Y1, Z1)P2(X2, Y2, Z2),在2D图像平面中使用p1(x1, y1)p2(x2, y2)。当然P1P2不知道,只有图片上的对(p1p2)及其距离D

3.)接下来,如果你知道相机校准矩阵C,你有两个方程:

p1 = C * P1p2 = C * P2

然后:C^-1 * p1 = P1'C^-1 * p2 = P2'其中P1' = (X1 / Z1, Y1 / Z1, 1)P2' = (X2 / Z2, Y2 / Z2, 1)。这意味着C^-1 * p1会返回属于Z1 = 1距离的点的3D坐标。

但确切的距离不是1,而是Z1Z2。现在,让我们假设Z1 == Z2 == Z我们正在寻找距离Z

这遵循Z * C^-1 * p1 = P1Z * C^-1 * p2 = P2

下一个(Z * C^-1 * p1) - (Z * C^-1 * p2) = P1 - P2

Z * ((C^-1 * p1) - C^-1 * p2)) = P1 - P2

Z^2 * ((C^-1 * p1) - C^-1 * p2))^2 = (P1 - P2)^2 = D^2

现在,Cp1p2D已知,只有Z是最后一个等式中的未知变量。

当然,这只是一个基本的解决方案,并且使用了对象点的距离非常相似的假设,但它可以工作。