The part of the parameter resolution, modified according to its own storage form
#include <iostream>#include<fstream>#include<io.h>#include<opencv2/opencv.hpp>using namespaceStd;inlinevoidGetparams (Char*pathname, cvmat* intrinsics, Cvmat *Distortion_coeff) {FILE* IFS = fopen (PathName,"R"); FSCANF (IFS,"%f\t%f\n",& (intrinsics->data.fl[0]), & (intrinsics->data.fl[4])); FSCANF (IFS,"%f\t%f\n", &intrinsics->data.fl[2], &intrinsics->data.fl[5]); Intrinsics->data.fl[1] =0; Intrinsics->data.fl[3] =0; Intrinsics->data.fl[6] =0; Intrinsics->data.fl[7] =0; Intrinsics->data.fl[8] =1; floattmp; FSCANF (IFS,"%f\n",&tmp); for(intI=0; i<4; i++) fscanf (IFS,"%f",&distortion_coeff->Data.fl[i]); //Print Output: for(intI=0; i<3; i++) {cout<<Endl; for(intj=0; j<3; J + +) cout<<intrinsics->data.fl[i*3+j]<<"\ t"; } for(intI=0; i<4; i++) cout<<distortion_coeff->data.fl[i]<<Endl; Fclose (IFS);}intMain () {Cvmat* Intrinsics = Cvcreatemat (3,3, CV_32FC1); Cvmat* Distortion_coeff = Cvcreatemat (1,4, CV_32FC1); Getparams ("E:\\camerainsparams.txt", intrinsics, Distortion_coeff); Iplimage*img = Cvloadimage ("123.bmp",8,1); Iplimage*undistimg =cvcloneimage (IMG); CvUndistort2 (img,undistimg, Intrinsics,distortion_coeff); Cvshowimage ("Ori", IMG); Cvshowimage ("undist", undistimg); Jcvwaitkey (); Cvreleaseimage (&img); Cvreleaseimage (&undistimg);return 0;}
Or
iplimage* mygetudisimg (iplimage* inputimg, cvmat* intrinsics, cvmat* Distortion_coeff) { IplImage* udistimg = cvcloneimage (inputimg); CvUndistort2 (Inputimg,udistimg,intrinsics,distortion_coeff); return udistimg;}
After correction:
OPENCV Image Distortion correction (after camera calibration to obtain internal and distortion parameters)