有人知道这个opencv错误发生了什么吗?
rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, cameraMatrix, dist)
提升它的行代码是:
cameraMatrix
我按照本教程的步骤一步一步: http://docs.opencv.org/master/dc/dbb/tutorial_py_calibration.html
似乎cameraMatrix
不正确,但为什么?
[[ 535.99484574, 0. , 334.33388272],
[ 0. , 535.99541504, 239.81116973],
[ 0. , 0. , 1. ]]
看起来像这样(看似here):
HTTPResponseMessage[]
来自教程: cameraMatrix - 输入相机矩阵
答案 0 :(得分:2)
我认为你的相机矩阵没问题。
错误可能是由 objp 或角落引起的。
objp 必须是对象坐标空间中的对象点数组,3xN / Nx3 1通道或1xN / Nx1 3通道,其中N是点数。 cv :: Point3f的std :: vector也可以在这里传递。
角落必须是相应图像点的阵列,2xN / Nx2 1通道或1xN / Nx1 2通道,其中N是点数。 cv :: Point2f的std :: vector也可以在这里传递。
答案 1 :(得分:1)
出现同样的问题,如果您按照教程说明objp
的声明不正确 - 应该是这样的(w,h
是您的棋盘尺寸):
objp = np.zeros((w*h, 1, 3), np.float32)
objp[:,:,:2] = np.mgrid[0:w, 0:h].T.reshape(-1,1,2)
答案 2 :(得分:0)
还要小心改变:
rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)
要么:
_, rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)
或
rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, mtx, dist)[:-3]
如果使用Python。
请参阅此处的主题: 'Too many values to unpack' with solvePnPRansac() - Pose Estimation