我使用opencv 3.0.0测试版。
我校准了我的相机,我想将图像点(2D)投影到3D中的点。
我看到了函数:void fisheye::projectPoints(InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
,但我想要相反的投影。
我知道:
- cameraMatrix
- 失真系数
- 翻译矢量
- 旋转矢量和
- 我的对象3D点和3D原点之间的距离
我该怎么做?
如果您知道对象的3D几何结构和相应的2D图像点,则可以从3D-2D点的对应关系中找到对象姿态。
你需要知道:
- CCD_ 2:三维物体坐标空间中物体点的阵列
imagePoints
–对应2D图像点的阵列- 以及相机矩阵和失真系数
则solverpnp()将估计CCD_ 4和CCD_。
"图像点"是图像中网格角的坐标。这些是以像素为单位给出的。
"对象点"是网格角在"对象空间"中的坐标,即它们相对于彼此的位置。
例如,左上角位于图像坐标(127, 265)
,其对象坐标为(0, 0)
,因为左上角是两个轴上的第一个。其右侧的下一个角可能具有坐标(145, 263)
,其对象坐标为(1, 0)
(即第二列、第一行上的角)等。
为了解决我的问题,我实现了自己的重投影函数。此函数与鱼眼::projectPoint相反。这是我的问题特有的,因为我的三维点和原点之间的距离是已知的。
感谢Micka的评论。