gpt4 book ai didi

python - solvePnPRansac 为 rvecs 和 tvecs 返回零值

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:27 27 4
gpt4 key购买 nike

我想找出相机的旋转和平移矢量。

但是,文档中的 solvePnPRansac 方法为每个方法提供了零矩阵;它返回角的值作为输出。

 print corners
[[[ 372.48184204 80.71842194]]
[[ 374.40280151 103.50676727]]
[[ 377.49230957 128.53459167]]
... so on till ..
[[ 204.40803528 168.18978882]]
[[ 203.94168091 193.23649597]]
[[ 204.39024353 220.48114014]]
[[ 204.54725647 248.10583496]]]

我正在使用文档中的代码并根据我的棋盘对其进行了修改。

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((7*7,3), np.float32)
objp[:,:2] = np.mgrid[0:7,0:7].T.reshape(-1,2)
axis = np.float32([[3,0,0], [0,3,0], [0,0,-3]]).reshape(-1,3)

for fname in glob.glob('../Right*.jpg'):
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, (7,7),None)
print ret,corners #ret is true and corners returns an array
if ret == True:
# Find the rotation and translation vectors.
rvecs, tvecs , inliers = cv2.solvePnPRansac(objp, corners, mtx, dist)

rvecstvecs[0,0,0][0,0,0] ,分别。

最佳答案

我在 python 中使用了 solvePnPRansac,我遇到了同样的问题。与 solvePnP 相比,solvePnPRansac 提供的是它根据从给定的点对应集中选择 4 个或更多点来计算 rvec 和 tvec。做出这种选择使得由此获得的投影将导致对所有给定点的足够好的拟合。如果您对任何点的选择都不够好,该函数将返回零。

您可以增加“reprojectError”的值(默认为 8)。这将接受更大的重投影误差,因此结果不太好,但总比没有结果好(除非你的目标是高精度)。例如,尝试:

rvecs, tvecs , inliers = cv2.solvePnPRansac(objp, corners, mtx, dist,reprojectionError=10)

最后,为了完整起见,如果您为 reprojectError 选择的值高到可以考虑所有点,同时仍然导致可接受的拟合,则您的结果将与使用 solvePnP 时相同。

关于python - solvePnPRansac 为 rvecs 和 tvecs 返回零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23921090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com