记录一下自己实现的过程
首先找到自己opencv所在的目录找:
然后通过VS新创一个工作环境将以上红框的三个部分放入到新建环境下;
1、首先是对 camera_calibration.cpp进行修改:
在头文件下添加:#pragma warning(disable:4996) 命令,不然运行会出错
将以上注释部分修改为红框部分, in_VID5.xml 就是我们在opencv中复制的文件,
2、修改in_VID5.xml文件:
这里有和多地方需要进行修改,我就直接放图片了:
3、修改VID5.xml里面的图片路径为自己图片的路径:
4、数据集的获取(自己进行拍摄其它博主建议是在16到25张):
(数据集这里一定要注意,尽量对着电脑拍)
做完以上步骤直接运行camera_calibration.cpp文件,会有一个展示效果图和保存一个out_camera_data.xml文件,这就是我们所要使用的东西。
效果图(你训练时用了几张就会有集装效果图,这里就展示单个):
5、如何使用自己保存好的标定文件:
#include <opencv2/opencv.hpp>
#include <opencv2/calib3d/calib3d.hpp>
using namespace std;
using namespace cv;
/**
* @主函数
*/
int main()
{
/// 读取一副图片,不改变图片本身的颜色类型(该读取方式为DOS运行模式)
Mat src = imread("3.jpg");
imshow("1", src);
Mat distortion = src.clone();
imshow("2", distortion);
Mat camera_matrix = Mat(3, 3, CV_32FC1);
Mat distortion_coefficients;
//导入相机内参和畸变系数矩阵
FileStorage file_storage("out_camera_data.xml", FileStorage::READ);
file_storage["camera_matrix"] >> camera_matrix;
cout << camera_matrix << endl;
file_storage["distortion_coefficients"] >> distortion_coefficients;
cout << distortion_coefficients << endl;
file_storage.release();
//矫正
undistort(src, distortion, camera_matrix, distortion_coefficients);
imshow("img", src);
imshow("undistort", distortion);
//imwrite("undistort.jpg", distortion);
waitKey(0);
return 0;
}
效果对比:
原图:
效果图: