solvePnP/solvePnPRansac 没有提供良好的相机位置估计

solvePnP/solvePnPRansac doesn't give good camera position estimation

我正在尝试使用此代码通过在图片中定位平面图像来查找相机位置:

https://docs.opencv.org/3.3.1/d1/de0/tutorial_py_feature_homography.html

对于这张图片,它可以正常工作:

并找到规律。我使用 cv2.projectPoints 在背景图片上绘制图像:

但有时解决 PnP return 疯狂的结果,例如这张图片:

如果我重新投影图案,我会得到疯狂的图像位置:

对于这种情况,我已经验证了 SIFT 点,它们看起来正确且匹配:

我尝试使用 solvePnPRansac 而不是 solvePnP,但没有用,估计位置仍然很奇怪。 可能是什么原因,我该如何解决这个问题?

好的,在这种情况下,我已经通过将失真矩阵设置为 np.array([]) 来改进姿态估计,因为我已经在 SIFT 之前校正了图像。同样适用于 cv2.projectPoints,也不需要为此函数提供失真系数。