2

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

我有关于我的图像的 3d 信息:我知道 a、b 的长度以及 c、d、e、f 和 g 的不同高度。我使高度不同以获得更多 3d 信息,但如果不需要它,那将是可取的。

最终,我需要知道在我从相机馈送中获得的 [x,y] 位置上的变换后,粉红色点在矩形中的真正位置。

在此处输入图像描述

4

1 回答 1

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。

于 2013-09-28T18:16:20.417 回答