从六路相机的标定结果yaml文件中读取内参,外参以及畸变系数进行图像去畸变OpencvC++代码
时间: 2024-03-26 10:40:50 浏览: 142
好的,下面是一个使用OpenCV C++实现从yaml文件中读取内参、外参和畸变系数,并对图像进行去畸变的代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
using namespace cv;
using namespace std;
int main()
{
// 读取yaml文件
FileStorage fs("calibration_result.yaml", FileStorage::READ);
// 获取内参
Mat intrinsic;
fs["camera_matrix"] >> intrinsic;
// 获取畸变系数
Mat distortion;
fs["distortion_coefficients"] >> distortion;
// 获取外参
vector<Mat> rvecs, tvecs;
fs["extrinsic_parameters"]["rvecs"] >> rvecs;
fs["extrinsic_parameters"]["tvecs"] >> tvecs;
// 加载图像
Mat img = imread("image.jpg");
// 进行去畸变
Mat undistorted_img;
undistort(img, undistorted_img, intrinsic, distortion);
// 显示结果
imshow("Original Image", img);
imshow("Undistorted Image", undistorted_img);
waitKey(0);
destroyAllWindows();
return 0;
}
```
其中,`calibration_result.yaml`是六路相机标定得到的结果文件,`image.jpg`是需要进行去畸变的图像文件。`FileStorage`类可以用于读取和写入yaml文件。`intrinsic`和`distortion`分别存储了相机的内参和畸变系数。`rvecs`和`tvecs`分别存储了相机的旋转向量和平移向量,可以用于计算相机的外参。`undistort()`函数会根据内参、畸变系数和相机的外参对图像进行去畸变处理,返回去畸变后的结果图像。
阅读全文