OpenCV - 将相机矩阵和失真系数存储为Mat

时间:2015-12-01 14:53:42

标签: 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指定一系列行和列,然后为每个值分配一个索引?

1 个答案:

答案 0 :(得分:4)

您可以在undistort的OpenCV文档中看到:

相机矩阵是一个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 是一个矢量或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

上找到参数的含义