opencv如何利用相机内参去畸变
时间: 2024-12-25 22:11:16 浏览: 3
OpenCV是一个强大的计算机视觉库,其中包含了处理相机校正和图像畸变的功能。当使用摄像头拍摄图像时,由于镜头、传感器等因素,可能会导致像点偏离理想的位置(即无畸变的情况)。OpenCV通过相机内参(Camera Intrinsic Parameters)来纠正这种现象。
相机内参主要包括以下几个参数:
1. **焦距**( focal length):镜头主光轴到成像平面的距离,通常表示为像素单位。
2. **光学中心**(principal point):图像坐标系中的焦点位置,对应于实际成像面的几何中心。
3. **Skew(径向失真系数)**:有时包含对称失真,如偏斜失真,但在标准的Pinhole Camera Model中通常假设为0。
4. **尺度因子**(Scaling factor):用于调整像素尺寸与物理尺寸之间的比例。
5. **旋转矩阵**(Rotation matrix):如果相机不是水平放置的,可能存在绕x,y轴的旋转。
为了去畸变,OpenCV提供了一些函数,比如`cv::undistort()`,它需要两个输入:一个是存放相机内参的`Mat`对象,另一个是存储了畸变参数(通常是反畸变地图,也可以从`calibrateCamera()`等函数得到)的`Map1`和`Map2`结构体。这个函数会将带有畸变的图像映射回无畸变的空间。
以下是基本步骤:
1. 使用`calibrateCamera()`或`solvePnP()`进行相机标定,获取内参矩阵和畸变参数。
2. 对每个新采集的图像应用`undistort()`函数,去除畸变并获得无畸变的图像。
```cpp
// 示例代码片段
cv::Mat cameraMatrix, distCoeffs; // 存储相机内参和畸变参数
cv::Mat undistortedImage; // 结果保存在这里
cv::undistort(inputImage, undistortedImage, cameraMatrix, distCoeffs);
```
阅读全文