我想使用 OpenCV 的 projectPoints 函数在网络摄像头图像中绘制 3D 位置。 在测试过程中,我注意到,我总是与真实对象有一定的偏移。当尝试将原点 (0,0,0) 投影到图像中心时,这一点最为明显。 图像形状为(2988, 5312, 3),大红点是图像中心在(1494, 2656),带有线条的小红点是原点(0,0,0)的投影,其中NO平移且无旋转导致 (1476, 2732)。
主要问题:为什么投影点不在图像中间?
我像这样确定了投影点:
origin_2d, jacobian = cv2.projectPoints(
np.array([(0.0, 0.0, 0.0)]),
np.array([(0.0, 0.0, 0.0)]),
np.array([(0.0, 0.0, 0.0)]),
mtx,
dist,
)
所以原点 (0,0,0) 应该投影到 2D,没有平移和旋转,从而出现在图像中心,对吗?
我通过使用您在图像中看到的棋盘执行此处描述的相机校准例程OpenCV 文档:相机校准来获取相机 mtx 和 dist。 我的校准有问题吗?还是我在投影过程中误解了什么?
谢谢并致以最诚挚的问候, 菲利克斯
图像形状为(2988, 5312, 3),大红点为图像中心在(1494, 2656)
你校准了那个相机,对吗?那么那不是光心。光学中心以及焦距位于相机矩阵中。
(1476, 2732)
看起来更像是这样,尽管我希望这些数字小数点后也有数字。