OpenCV错误通过校准教程(solvePnPRansac)

时间:2015-05-16 03:34:57

标签: python computer-vision camera-calibration opencv3.0 pose-estimation

有人知道这个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 - 输入相机矩阵

cameraMatrix – Input camera matrix =

3 个答案:

答案 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