OpenCV错误通过标定教程(solvePnPRansac)

OpenCV Error through calibration tutorial (solvePnPRansac)

谁能知道这个 opencv 错误是怎么回事?

cv2.error: /home/desktop/OpenCV/opencv/modules/core/src/matrix.cpp:2294:
 error: (-215) d == 2 && (sizes[0] == 1 || sizes[1] == 1 || 
sizes[0]*sizes[1] == 0) in function create

引发它的行代码是:

rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners2, cameraMatrix, dist)

我是按照这个教程一步步来的: http://docs.opencv.org/master/dc/dbb/tutorial_py_calibration.html

似乎cameraMatrix不正确,但为什么?

cameraMatrix 看起来像这样,而且看起来应该是这样(参见 here):

[[ 535.99484574,    0.        ,  334.33388272],
[   0.        ,  535.99541504,  239.81116973],
[   0.        ,    0.        ,    1.        ]]

来自教程: cameraMatrix – 输入相机矩阵

我觉得你的相机矩阵没问题。

错误可能是由objpcorners引起的。

objp 必须是对象坐标 space 中的对象点数组,3xN/Nx3 1 通道或 1xN/Nx1 3 通道,其中 N 是点数。 cv::Point3f的std::vector也可以传到这里

corners 必须是相应图像点的数组,2xN/Nx2 1 通道或 1xN/Nx1 2 通道,其中 N 是点数。 cv::Point2f的std::vector也可以传到这里

有同样的问题,如果您按照教程进行操作,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)

还要注意改:

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。

在此处查看主题: