djk*_*jkp 4 python opencv numpy opencv3.0 opencv-solvepnp
OpenCV错误:
断言失败(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))在cvUndistortPoints中,文件/home/javvaji/opencv-3.2.0/modules/imgproc/src/undistort.cpp ,第293行
retval, rvec, tvec = cv2.solvePnP(cam.object_points, cam.image_points, cam.camera_matrix, cam.dist_coefficients, None, None, False, cv2.SOLVEPNP_P3P)
Run Code Online (Sandbox Code Playgroud)
我正在使用带有标志SOLVEPNP_P3P的solvePnP函数.它给出了断言错误.使用SOLVEPNP_ITERATIVE标志,相同的solvePnP代码可以正常工作.使用P3P标志,它在内部调用undistortPoints函数,该函数给出错误.
solvePnP代码ref:https://github.com/opencv/opencv/blob ...
怎么解决这个?
不完整的文档 - python中的solvePnP(问题是opencv github repo中的问题) https://github.com/opencv/opencv/issues/4943
Numpy数组切片不能作为输入工作,因为solvePnP需要连续数组(由使用cv :: Mat :: checkVector()的断言在modules/calib3d/src/solvepnp.cpp版本2.4.9的第55行附近强制执行)
P3P算法要求图像点处于形状(N,1,2)的数组中,因为它调用了cv :: undistortPoints(模块的第75行/ 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))
| 归档时间: |
|
| 查看次数: |
1714 次 |
| 最近记录: |