python - 在opencv2中使用3D感知

标签 python opencv 3d geometry

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

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

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

enter image description here

最佳答案

如果用C,D,E,F表示原图中黑色多边形的四个角的位置(每一个都是一个二维点),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.

关于python - 在opencv2中使用3D感知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19067908/

相关文章:

iphone - 如何使用大气着色器为iOS制作逼真的3D地球

python - Python 请求中的 PDF

python - 如何将具有特定文件扩展名的文件复制到我的 python(2.5 版)脚本中的文件夹中?

java - OpenCV 模板匹配 Max Min 取值范围是多少?需要作为theshold/c++/java

rendering - 我应该如何处理裁剪到观察平面的 3D 点的投影?

algorithm - 检测三角形和旋转球体之间的 3D 碰撞

python - 如何将 python ImportError 捕获为 Shell 错误

python - 从两个列表构建字典

opencv - 直方图值的平均值 OpenCV

opencv - 如何使用OpenCV在白色背景上打印彩色文本