OpenCV solvePnP barreldistoriton

OpenCV solvePnP barreldistoriton,opencv,camera-calibration,distortion,Opencv,Camera Calibration,Distortion,我正在使用OpenCVs solvePnP获取相机的姿势/位置。 我使用用户选择的点,在已经校准的图像上,对径向和切向失真进行了修复,从而实现了这一点 然而,似乎solvePnP()除了在图像中选择的点之外,还将失真系数作为输入,我认为这意味着taht solvePnP将失真修复应用于作为函数输入的点 这会在我的程序中产生一个小错误,因为源图像已经扭曲了,对吗 如果是,如何使solvePnP()忽略barreldistoration?我可以传递一个失真系数设置为1的向量吗?还是应该将所有值都设置

我正在使用OpenCVs solvePnP获取相机的姿势/位置。 我使用用户选择的点,在已经校准的图像上,对径向和切向失真进行了修复,从而实现了这一点

然而,似乎solvePnP()除了在图像中选择的点之外,还将失真系数作为输入,我认为这意味着taht solvePnP将失真修复应用于作为函数输入的点

这会在我的程序中产生一个小错误,因为源图像已经扭曲了,对吗

如果是,如何使solvePnP()忽略barreldistoration?我可以传递一个失真系数设置为1的向量吗?还是应该将所有值都设置为0?
还有别的办法吗?

过去,我只是传递了一个空的简历::Mat

cv::solvePnP(world_points, image_points, camera_mat, cv::Mat(), rotation_vector, translation_vector);

上面说,如果传递NULL,它将为您将所有系数设置为0。

在过去,我刚刚传递了一个空的cv::Mat

cv::solvePnP(world_points, image_points, camera_mat, cv::Mat(), rotation_vector, translation_vector);

上面说,如果你通过NULL,它会为你将所有系数设置为0。

Ahh,当然了。我应该把文档读得好一点。谢谢另一个问题:关于相机矩阵,如果我使用的图像已经通过InitUnderstrateMap()+remap()进行了校正,那么哪种相机矩阵最适合作为solvepnp的输入?校正后的相机矩阵,或简单的Mat::eye()?用
cv::noArray()
替换
cv::Mat()
,具有相同的效果,但使意图更加清晰。@HenrikKjusAlstad相机矩阵(称为C)将3d世界坐标映射到2d图像坐标。solvePnP本质上返回一个变换(称之为T),使CTworld_坐标=图像_坐标达到其最大能力。当然,相机矩阵是由相机的内在参数SAHH定义的。我应该把文档读得好一点。谢谢另一个问题:关于相机矩阵,如果我使用的图像已经通过InitUnderstrateMap()+remap()进行了校正,那么哪种相机矩阵最适合作为solvepnp的输入?校正后的相机矩阵,或简单的Mat::eye()?用
cv::noArray()
替换
cv::Mat()
,具有相同的效果,但使意图更加清晰。@HenrikKjusAlstad相机矩阵(称为C)将3d世界坐标映射到2d图像坐标。solvePnP本质上返回一个变换(称之为T),使CTworld_坐标=图像_坐标达到其最大能力。摄影机矩阵由摄影机的固有参数定义