c++ - OpenCV - 将相机矩阵和畸变系数存储为 Mat

标签 c++ opencv matrix camera-calibration

我使用示例 OpenCV 程序计算相机矩阵和相机畸变系数,并生成包含相关数据的 xml 文件。

我正在尝试通过 undistort 函数使用它,但我不确定如何将这些值存储为 Mat

Mat cameraMatrix;
Mat distortionCoefficients;
undistort(image, newImage, cameraMatrix, distortionCoefficients);

我试过:

Mat cameraMatrix = 1.7514028018776246e+03 0. 1.2635000000000000e+03 0. 1.7514028018776246e+03 9.2750000000000000e+02 0. 0. 1.;
Mat distortionCoefficients = 1.3287735059062630e-01 -6.8376776294978103e-01 0. 0. 8.1215478360827675e-01;

我是否需要尝试为 Mat var 指定一系列行和列,然后为每个值分配一个索引?

最佳答案

您可以在 OpenCV 文档中查看 undistort那:

相机矩阵是一个 3x3 矩阵:

 fx   0  cx
  0  fy  cy
  0   0   1 

您可以创建为:

Mat cameraMatrix = (Mat1d(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 1);

distortionCoefficients 是一个 vector 或 4、5 或 8 个参数:

k1, k2, p1, p2 [, k3 [, k4, k5, k6]]

您可以创建为:

Mat distortionCoefficients = (Mat1d(1, 4) << k1, k2, p1, p2);
Mat distortionCoefficients = (Mat1d(1, 5) << k1, k2, p1, p2, k3);
Mat distortionCoefficients = (Mat1d(1, 8) << k1, k2, p1, p2, k3, k4, k5, k6);

参数含义可以在OpenCV documentation上找到

关于c++ - OpenCV - 将相机矩阵和畸变系数存储为 Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34023303/

相关文章:

r - 矩阵 "<="第 i 行中的元素是向量的第 i 个元素

为随机数二维数组创建函数

python - 构建分配矩阵 - Python

c++ - 在 C++ 中通过 winsock 发送 Unicode 字符串

c++ - 打开简历中的 videoCapture 后应用程序无响应

java - 将 objective-c 代码转换为 java 会出现编译错误

c++ - OpenCV 尝试分配 10 艾字节

c++ - 崇高文本3 : SublimeLinter: c disabled ("cppcheck" cannot be found)

c++ - 如何以及何时使用 Q_DECLARE_METATYPE

c++ - 是否可以有应用程序级别的单例?