opencv的相机标定是基于C/C++程序的,在实际的操作过程中,显得笨重。由于相机参数一般仅需要标定一次。所以可以借助Matlab的相机标定工具箱完成相机参数标定以及双目相机的立体标定工作。
Matlab相机标定工具箱的界面如下:
点击“Standard...”进入工作界面
按照工具箱说明完成相机的标定。具体步骤可以参见网站https://www.vision.caltech.edu/bouguetj/calib_doc/。
完成标定后将相机参数导入到C开发环境,完成图像的矫正,程序如下:
#include
#include
#include
#include
#ifndef _CRT_SECURE_NO_WARNINGS
# define _CRT_SECURE_NO_WARNINGS
#endif
using namespace cv;
using namespace std;
int main()
{
double fcx,fcy,ccx,ccy,kc1,kc2;
fcx=532.779287375286000;
fcy=533.096085253460050;
ccx=342.009896978253830;
ccy=233.454857299859070;
kc1=-0.290948918980034;
kc2=0.106626114724015;
double mi[3][3]={{fcx,0,ccx},{0,fcy,ccy},{0,0,1}};
double md[5]={kc1,kc2,0,0,0};
Mat cameraMatrix,distCoeffs;
cameraMatrix=Mat(3,3,CV_64F,mi);
distCoeffs=Mat(1,5,CV_64F,md);
Mat view;
view=imread("../images/lena.jpg");
//cvtColor(view,view,CV_BGR2GRAY);
imshow("RAW IMAGE",view);
Mat tmp=view.clone();
undistort(tmp,view,cameraMatrix,distCoeffs);
imshow("undistort",view);
imwrite("lena_rectified1.jpg",view);
//cvWaitKey(1);
return 0;
}
结果如下:
矫正前
矫正后