gpt4 book ai didi

python - 第 293 行的 OpenCV 错误 : Assertion failed in undistort. cpp

转载 作者:太空狗 更新时间:2023-10-30 02:26:43 25 4
gpt4 key购买 nike

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 函数。

solvePnP code ref

如何解决?

最佳答案

不完整的文档 -- solvePnP in python(问题是已知的,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 channel 信息。

  • 因此,给定一些数据 D = np.array(...) 其中 D.shape = (N,M),为了使用它的一个子集,例如 imagePoints,必须有效地复制它变成一个新数组:imagePoints = np.ascontiguousarray(D[:,:2]).reshape((N,1,2))

关于python - 第 293 行的 OpenCV 错误 : Assertion failed in undistort. cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44042323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com