使用Opencv对相机进行畸变矫正
时间: 2024-01-26 13:03:25 浏览: 87
相机镜头存在畸变,会导致图像中的物体形变或者变形。为了解决这个问题,我们可以使用OpenCV对相机进行畸变矫正。
步骤如下:
1. 读取相机内参矩阵和畸变系数,可以通过相机标定得到。
```python
import numpy as np
import cv2
K = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) # 相机内参矩阵
dist_coef = np.array([k1, k2, p1, p2, k3]) # 畸变系数
```
2. 读取图像并进行畸变矫正。
```python
img = cv2.imread('input.jpg') # 读取图像
h, w = img.shape[:2]
new_K, roi = cv2.getOptimalNewCameraMatrix(K, dist_coef, (w, h), 1, (w, h)) # 计算新的内参矩阵
undistorted_img = cv2.undistort(img, K, dist_coef, None, new_K) # 畸变矫正
```
其中,cv2.getOptimalNewCameraMatrix()函数可以计算新的内参矩阵,cv2.undistort()函数可以对图像进行畸变矫正。
3. 可以选择只保留校正后的有效区域部分。
```python
x, y, w, h = roi
undistorted_img = undistorted_img[y:y+h, x:x+w]
```
这样就完成了对相机的畸变矫正。
完整代码如下:
```python
import numpy as np
import cv2
# 定义相机内参矩阵和畸变系数
K = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]])
dist_coef = np.array([k1, k2, p1, p2, k3])
# 读取图像并进行畸变矫正
img = cv2.imread('input.jpg')
h, w = img.shape[:2]
new_K, roi = cv2.getOptimalNewCameraMatrix(K, dist_coef, (w, h), 1, (w, h))
undistorted_img = cv2.undistort(img, K, dist_coef, None, new_K)
# 只保留校正后的有效区域部分
x, y, w, h = roi
undistorted_img = undistorted_img[y:y+h, x:x+w]
# 显示结果
cv2.imshow('Undistorted Image', undistorted_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文