简体   繁体   中英

OpenCV - store camera matrix and distortion coefficients as Mat

I've used the sample OpenCV program to calculate the camera matrix and distortion coefficients from my camera and produced an xml file with the relevant data.

I'm trying to use it through the undistort function but I'm not sure how to store the values as a Mat .

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

I've tried:

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;

Do I need to try and specify a series of rows and columns to the Mat var and then assign each value an index?

You can see on OpenCV documentation for undistort that:

Camera matrix is a 3x3 matrix:

 fx   0  cx
  0  fy  cy
  0   0   1 

that you can create as:

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

distortionCoefficients is a vector or 4, 5, or 8 parameters:

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

that you can create as:

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);

You can find the meaning of the parameters on OpenCV documentation

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM