opencv标定 畸变
时间: 2023-11-05 14:05:24 浏览: 81
OpenCV中的相机标定方法可以对径向畸变进行有效校正。在使用相机标定方法时,需要提供内参和畸变系数。内参是相机的内部参数,包括焦距、主点坐标等,畸变系数描述了图像的径向畸变和切向畸变。
在OpenCV中,可以通过以下代码实现相机标定和畸变校正:
```cpp
#include <opencv2/calib3d.hpp>
using namespace std;
using namespace cv;
// 定义相机标定的相关常量设置与变量
vector<string> files;
glob("D:/images/camera2d", files);
vector<vector<Point2f>> imagePoints;
vector<vector<Point3f>> objectPoints;
TermCriteria criteria = TermCriteria(TermCriteria::EPS | TermCriteria::MAX_ITER, 30, 0.001);
int numCornersHor = 7;
int numCornersVer = 7;
int numSquares = 50;
vector<Point3f> obj;
for (int i = 0; i < numCornersHor; i++) {
for (int j = 0; j < numCornersVer; j++) {
obj.push_back(Point3f((float)j * numSquares, (float)i * numSquares, 0));
}
}
// 进行相机标定
Mat cameraMatrix, distCoeffs;
vector<Mat> rvecs, tvecs;
calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, criteria);
// 畸变校正
for (int i = 0; i < files.size(); i++) {
Mat dst;
Mat image = imread(files[i]);
undistort(image, dst, cameraMatrix, distCoeffs);
imshow("image", image);
imshow("undistortimage", dst);
waitKey(1000);
}
```
上述代码中,首先使用`glob`函数加载相机标定所用的图像文件。然后,定义了图像坐标系和世界坐标系中的点,用于相机标定。通过`calibrateCamera`函数进行相机标定,得到相机内参和畸变系数。最后,使用`undistort`函数实现畸变校正,并显示畸变前后的图像。
阅读全文