在opencv2中使用3D感知

时间:2013-09-28 14:16:28

标签: python opencv 3d geometry

任何人都可以解释是否有可能,以及如何使用cv2.getPerspectiveTransform()。

我有关于我的图像的三维信息:我知道a,b的长度以及c,d,e,f和g的 不同的 高度。我使高度不同以获得更多的3D信息,但如果不需要则更好。

最终我需要知道在我从相机Feed获得的[x,y]位置变换后,矩形在矩形中的确切位置。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果用C,D,E,F表示原始图像中黑色多边形的四个角的位置(每个角都是2D点),C',D',E',F'目标图像中相应点的位置(可能是(0,0),(a,0),(a,b),(0,b)),M = cv2.getPerspectiveTransform({C,D,E, F},{C',D',E',F'})是从一个多边形到另一个多边形的透视变换。

给定 g 的垂直投影在原始图像中的黑色多边形上的位置G,您可以将其在目标图像中的位置计算为cv2.transform(G,M)。这将返回一个点(x,y,z),其中最后一个坐标z是一个标准化项。当您的点在目标图像中处于“无穷远”时,此z为零。如果z不为零,则您要查找的点是(x / z,y / z)。

如果z为零,则你的点在无穷大处,在向量(x,y)的支撑方向上(想想G将在黑色的两个相对边的支撑线的交叉点处的情况)源图像中的多边形)。

如果你知道c,d,e,f,g的高度相等,这些点也是共面的,完全相同的方法适用于c,d,e,f,g而不是C,D, E,F,G。