OpenCV Error: Assertion failed in undistort.cpp at line 293
OpenCV Error: Assertion failed in undistort.cpp at line 293
Found solution at https://github.com/opencv/opencv/issues/4943
OpenCV 错误:
Assertion failed (CV_IS_MAT(_src) && CV_IS_MAT(_dst) && (_src->rows ==
1 || _src->cols == 1) && (_dst->rows == 1 || _dst->cols == 1) &&
_src->cols + _src->rows - 1 == _dst->rows + _dst->cols - 1 && (CV_MAT_TYPE(_src->type) == CV_32FC2 || CV_MAT_TYPE(_src->type) ==
CV_64FC2) && (CV_MAT_TYPE(_dst->type) == CV_32FC2 ||
CV_MAT_TYPE(_dst->type) == CV_64FC2)) in cvUndistortPoints, file
/home/javvaji/opencv-3.2.0/modules/imgproc/src/undistort.cpp, line 293
retval, rvec, tvec = cv2.solvePnP(cam.object_points, cam.image_points, cam.camera_matrix, cam.dist_coefficients, None, None, False, cv2.SOLVEPNP_P3P)
我正在使用带有标志 SOLVEPNP_P3P 的 solvePnP 函数。它给出断言错误。相同的 solvePnP 代码可以与 SOLVEPNP_ITERATIVE 标志配合使用。使用 P3P 标志,它在内部调用 undistortPoints 函数,该函数给出错误。
如何解决?
不完整的文档 -- python 中的 solvePnP
(问题是已知的,opencv github 存储库中的 issue is open)
Numpy 数组切片不能作为输入,因为 solvePnP 需要连续数组(由使用 cv::Mat::checkVector() 的断言在 line 55 of modules/calib3d/src/solvepnp.cpp 版本 2.4.9 附近强制执行)
P3P 算法要求图像点位于形状数组 (N,1,2) 中,因为它正在调用 cv::undistortPoints(大约 line 75 of modules/calib3d/src/solvepnp.cpp 版本 2.4.9)这需要2通道信息。
因此,给定一些数据 D = np.array(...) 其中 D.shape = (N,M),为了使用它的一个子集,例如,imagePoints,必须有效地将其复制到一个新数组中:imagePoints = np.ascontiguousarray(D[:,:2]).reshape((N,1,2))
Found solution at https://github.com/opencv/opencv/issues/4943
OpenCV 错误:
Assertion failed (CV_IS_MAT(_src) && CV_IS_MAT(_dst) && (_src->rows == 1 || _src->cols == 1) && (_dst->rows == 1 || _dst->cols == 1) && _src->cols + _src->rows - 1 == _dst->rows + _dst->cols - 1 && (CV_MAT_TYPE(_src->type) == CV_32FC2 || CV_MAT_TYPE(_src->type) == CV_64FC2) && (CV_MAT_TYPE(_dst->type) == CV_32FC2 || CV_MAT_TYPE(_dst->type) == CV_64FC2)) in cvUndistortPoints, file /home/javvaji/opencv-3.2.0/modules/imgproc/src/undistort.cpp, line 293
retval, rvec, tvec = cv2.solvePnP(cam.object_points, cam.image_points, cam.camera_matrix, cam.dist_coefficients, None, None, False, cv2.SOLVEPNP_P3P)
我正在使用带有标志 SOLVEPNP_P3P 的 solvePnP 函数。它给出断言错误。相同的 solvePnP 代码可以与 SOLVEPNP_ITERATIVE 标志配合使用。使用 P3P 标志,它在内部调用 undistortPoints 函数,该函数给出错误。
如何解决?
不完整的文档 -- python 中的 solvePnP (问题是已知的,opencv github 存储库中的 issue is open)
Numpy 数组切片不能作为输入,因为 solvePnP 需要连续数组(由使用 cv::Mat::checkVector() 的断言在 line 55 of modules/calib3d/src/solvepnp.cpp 版本 2.4.9 附近强制执行)
P3P 算法要求图像点位于形状数组 (N,1,2) 中,因为它正在调用 cv::undistortPoints(大约 line 75 of modules/calib3d/src/solvepnp.cpp 版本 2.4.9)这需要2通道信息。
因此,给定一些数据 D = np.array(...) 其中 D.shape = (N,M),为了使用它的一个子集,例如,imagePoints,必须有效地将其复制到一个新数组中:imagePoints = np.ascontiguousarray(D[:,:2]).reshape((N,1,2))