我使用的是opencv 3.0.0 beta。
我校准了相机,我想将图像点(2D)投影到3D点。
我看到了函数:void fisheye::projectPoints(InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray())
,但我想要相反的投影。
我知道:
我该怎么做?
答案 0 :(得分:2)
如果您知道对象的3D几何体和相应的2D图像点,那么您就可以从3D-2D点对应中找到对象姿势。
你需要知道:
objectPoints
:3D对象坐标空间中的对象点数组imagePoints
- 相应的2D图像点数组,然后solvepnp()会与rvec
一起估算tvec
,它会将模型坐标系中的点带到相机坐标系。
答案 1 :(得分:1)
为了解决我的问题,我实现了自己的重投影功能。此函数与fisheye :: projectPoint相反。这是我的问题所特有的,因为我的3D点和原点之间的距离是已知的。
感谢Micka的评论。
答案 2 :(得分:1)
"图像点"是图像中网格角的坐标。这些以像素比例给出。
"对象点"是"对象空间"中网格角的坐标,即它们相对于彼此的位置。
例如,您可以在图像坐标(127, 265)
处左上角,其对象坐标为(0, 0)
,因为左上角是两个轴的第一个。右边的下一个角可以有坐标(145, 263)
,其对象坐标为(1, 0)
(即第二列,第一行的角落)等。