gpt4 book ai didi

python - 如何使用 python cv2 api 为 undistortPoints 格式化 xy 点?

转载 作者:太空狗 更新时间:2023-10-29 20:54:38 25 4
gpt4 key购买 nike

我在格式化要传递给 undistortPoints (opencv 2.4.1) 的 x,y 点列表时遇到问题。

错误消息是特定于 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 数组,看起来相同的格式应该在这里工作。

最佳答案

我不太了解相机校准。但是看到你的代码和错误,我改成如下:

import cv2
import numpy as np
camera_matrix = np.array([[1.3e+03, 0., 6.0e+02], [0., 1.3e+03, 4.8e+02], [0., 0., 1.]], dtype=np.float32)
dist_coeffs = np.array([-2.4-01, 9.5e-02, -4.0e-04, 8.9e-05, 0.], dtype=np.float32)

test = np.zeros((10,1,2), dtype=np.float32)
xy_undistorted = cv2.undistortPoints(test, camera_matrix, dist_coeffs)

print xy_undistorted

下面是我得到的结果,检查是否正确:

[[[ 0.0187303   0.01477836]]

[[ 0.0187303 0.01477836]]

[[ 0.0187303 0.01477836]]

[[ 0.0187303 0.01477836]]

[[ 0.0187303 0.01477836]]

[[ 0.0187303 0.01477836]]

[[ 0.0187303 0.01477836]]

[[ 0.0187303 0.01477836]]

[[ 0.0187303 0.01477836]]

[[ 0.0187303 0.01477836]]]

问题是什么:

错误表明,源应该是一行或一列。应该是CV_32FC2或者CV_64FC2,意思是双 channel , float 。因此,使您的 src 形状为 (10,1,2) 或 (1,10,2)。这两种方法都有效并给出相同的结果(我自己检查过)。唯一的问题是,我不知道它是否正确,所以自己检查一下。

关于python - 如何使用 python cv2 api 为 undistortPoints 格式化 xy 点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11017984/

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