VS C++基于OpenCV进行相机标定和使用

记录一下自己实现的过程

首先找到自己opencv所在的目录找:

VS C++基于OpenCV进行相机标定和使用_第1张图片

 然后通过VS新创一个工作环境将以上红框的三个部分放入到新建环境下;

VS C++基于OpenCV进行相机标定和使用_第2张图片

1、首先是对 camera_calibration.cpp进行修改:

在头文件下添加:#pragma warning(disable:4996) 命令,不然运行会出错

VS C++基于OpenCV进行相机标定和使用_第3张图片

 将以上注释部分修改为红框部分, in_VID5.xml 就是我们在opencv中复制的文件,

2、修改in_VID5.xml文件:

这里有和多地方需要进行修改,我就直接放图片了:

VS C++基于OpenCV进行相机标定和使用_第4张图片

 

3、修改VID5.xml里面的图片路径为自己图片的路径:

VS C++基于OpenCV进行相机标定和使用_第5张图片

4、数据集的获取(自己进行拍摄其它博主建议是在16到25张):

(数据集这里一定要注意,尽量对着电脑拍)

VS C++基于OpenCV进行相机标定和使用_第6张图片

 做完以上步骤直接运行camera_calibration.cpp文件,会有一个展示效果图和保存一个out_camera_data.xml文件,这就是我们所要使用的东西。

效果图(你训练时用了几张就会有集装效果图,这里就展示单个):VS C++基于OpenCV进行相机标定和使用_第7张图片

5、如何使用自己保存好的标定文件:


#include 
#include 
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;
}

效果对比:
原图:

VS C++基于OpenCV进行相机标定和使用_第8张图片

 效果图:

VS C++基于OpenCV进行相机标定和使用_第9张图片

参考:​​​​​​利用opencv3标定单目相机(图片标定)和畸变校正_Pichairen-CSDN博客

物体根据相机位置显示_OpenCV相机标定与畸变校正_自闭本科生的博客-CSDN博客

你可能感兴趣的:(opencv,c++,计算机视觉)