我在格式化 x,y 点列表以传递给 undistortPoints (opencv 2.4.1) 时遇到问题。
错误消息是 c++ 特定的,并抱怨点数组不是 CV_32FC2 类型。我不应该能够传入 Nx2 numpy 数组吗?
import cv2
camera_matrix = array(mat('1.3e+03, 0., 6.0e+02; 0., 1.3e+03, 4.8e+02; 0., 0., 1.'), dtype=float32)
dist_coeffs = array(mat('-2.4-01, 9.5e-02, -4.0e-04, 8.9e-05, 0.'), dtype=float32)
test = zeros((10,2), dtype=float32)
print test.shape, type(test)
xy_undistorted = cv2.undistortPoints(test, camera_matrix, dist_coeffs)
结果是:
opencv/modules/imgproc/src/undistort.cpp:279: error: (-215) 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 function cvUndistortPoints
在 samples/python2/video.py 中使用了 projectPoints ,它接受一个数组并对其进行整形(-1,3),从而为该函数生成一个 Nx3 数组,似乎相同的格式应该在这里工作。