使用 opencv 3.0.0 beta 将图像点投影到对象点
Project image points to object points with opencv 3.0.0 beta
我用的是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())
但我想要相反的投影。
我知道:
- 相机矩阵,
- 失真系数,
- 翻译向量,
- 旋转向量和
- 我的对象 3D 点和 3D 原点之间的距离。
我该怎么做?
如果你知道物体的 3D 几何结构和相应的 2D 图像点,那么你就可以从 3D-2D 点对应关系中找到物体姿态。
你需要知道:
objectPoints
:3D对象坐标中的对象点数组space,
imagePoints
– 对应二维图像点的数组,
- 以及相机矩阵和畸变系数
然后solvepnp()将估计rvec
连同tvec
,将模型坐标系中的点带入相机坐标系。
为了解决我的问题,我实现了自己的重投影功能。这个函数是 fisheye::projectPoint 的反函数。它特定于我的问题,因为我的 3D 点和原点之间的距离是已知的。
感谢 Micka 的评论。
"Image points"是图像中网格角的坐标。这些以像素比例给出。
"Object points"是"object space"中网格角的坐标,也就是它们相对的位置。
因此,例如,您可以在图像坐标 (127, 265)
处设置左上角,而其对象坐标将为 (0, 0)
,因为左上角是跨两个轴的第一个.它右边的下一个角可以有坐标 (145, 263)
,它的对象坐标可以是 (1, 0)
(即第一行第二列的角),等等
我用的是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())
但我想要相反的投影。
我知道:
- 相机矩阵,
- 失真系数,
- 翻译向量,
- 旋转向量和
- 我的对象 3D 点和 3D 原点之间的距离。
我该怎么做?
如果你知道物体的 3D 几何结构和相应的 2D 图像点,那么你就可以从 3D-2D 点对应关系中找到物体姿态。
你需要知道:
objectPoints
:3D对象坐标中的对象点数组space,imagePoints
– 对应二维图像点的数组,- 以及相机矩阵和畸变系数
然后solvepnp()将估计rvec
连同tvec
,将模型坐标系中的点带入相机坐标系。
为了解决我的问题,我实现了自己的重投影功能。这个函数是 fisheye::projectPoint 的反函数。它特定于我的问题,因为我的 3D 点和原点之间的距离是已知的。
感谢 Micka 的评论。
"Image points"是图像中网格角的坐标。这些以像素比例给出。
"Object points"是"object space"中网格角的坐标,也就是它们相对的位置。
因此,例如,您可以在图像坐标 (127, 265)
处设置左上角,而其对象坐标将为 (0, 0)
,因为左上角是跨两个轴的第一个.它右边的下一个角可以有坐标 (145, 263)
,它的对象坐标可以是 (1, 0)
(即第一行第二列的角),等等