从六路相机的标定结果yaml文件中读取内参,外参以及畸变系数进行图像去畸变并保存去畸变图像的OpencvC++代码
时间: 2024-03-27 15:34:53 浏览: 151
好的,以下是代码示例:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
using namespace std;
using namespace cv;
int main()
{
string calibFile = "calibresult.yaml"; // 标定结果文件
FileStorage fs(calibFile, FileStorage::READ);
Mat cameraMatrix, distCoeffs; // 内参矩阵和畸变系数矩阵
vector<Mat> rvecs, tvecs; // 外参矩阵
fs["camera_matrix"] >> cameraMatrix;
fs["distortion_coefficients"] >> distCoeffs;
fs["rvecs"] >> rvecs;
fs["tvecs"] >> tvecs;
// 加载图像
Mat src = imread("test.jpg");
// 去畸变
Mat dst;
undistort(src, dst, cameraMatrix, distCoeffs);
// 保存去畸变的图像
imwrite("undistorted.jpg", dst);
return 0;
}
```
需要注意的是,这里的 `calibresult.yaml` 必须是六路相机标定的结果文件,其中包含了相机的内参矩阵、畸变系数矩阵、外参矩阵等信息。同时,读取时需要注意数据类型的匹配,例如读取矩阵应该使用 `>>` 运算符,读取数组应该使用 `["key"]` 的方式。
阅读全文