2

谁能知道这个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看起来像这样,看起来就像它一样(见这里):

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

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

cameraMatrix – 输入相机矩阵 =

4

3 回答 3

2

我认为你的相机矩阵没问题。

该错误可能是由objpcorners引起的。

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

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

于 2015-05-16T11:02:01.163 回答
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)
于 2015-09-23T14:12:15.357 回答
1

还要小心更改:

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。

请参阅此处的线程: 使用 solvePnPRansac() - 姿势估计“解包的值太多”

于 2016-09-13T13:44:01.883 回答