图片畸变矫正python代码
时间: 2025-05-31 15:42:38 浏览: 17
### 图像畸变矫正的Python代码
以下是使用OpenCV库实现图片畸变矫正的一个完整示例代码。该代码通过加载已知的相机标定数据来校正图像中的径向和切向畸变。
```python
import cv2
import numpy as np
def undistort_image(image_path, camera_matrix, dist_coeffs):
"""
对输入图像进行畸变矫正。
:param image_path: 输入图像路径
:param camera_matrix: 相机内参矩阵
:param dist_coeffs: 畸变系数
:return: 矫正后的图像
"""
# 加载原始图像
original_image = cv2.imread(image_path)
# 如果未提供camera_matrix或dist_coeffs,则需要先完成相机标定[^2]
if camera_matrix is None or dist_coeffs is None:
raise ValueError("Camera matrix and distortion coefficients are required.")
# 进行畸变矫正
h, w = original_image.shape[:2]
new_camera_mtx, roi = cv2.getOptimalNewCameraMatrix(camera_matrix, dist_coeffs, (w, h), 1, (w, h))
corrected_image = cv2.undistort(original_image, camera_matrix, dist_coeffs, None, new_camera_mtx)
return corrected_image
if __name__ == "__main__":
# 假设已经完成了相机标定,并得到了以下参数
mtx = np.array([[7.89e+02, 0., 3.20e+02],
[0., 7.89e+02, 2.40e+02],
[0., 0., 1.]]) # 替换为实际的camera_matrix[^2]
dist = np.array([[-0.35, 0.15, 0.001, 0.001, -0.05]]) # 替换为实际的dist_coeffs[^2]
input_image_path = 'distorted_image.jpg' # 被畸变的输入图像路径
output_image_path = 'corrected_image.jpg'
# 执行畸变矫正
corrected_img = undistort_image(input_image_path, mtx, dist)
# 保存结果图像
cv2.imwrite(output_image_path, corrected_img)
print(f"Corrected image saved to {output_image_path}")
```
#### 说明
- 上述代码实现了基于已有相机标定数据的图像畸变矫正功能[^2]。
- `mtx` 是相机内参矩阵,而 `dist` 则表示畸变系数数组。这两个参数可以通过执行相机标定程序得到[^3]。
- 函数 `cv2.getOptimalNewCameraMatrix()` 可以优化新的相机矩阵,从而减少不必要的黑边区域[^2]。
如果尚未有标定数据,可以按照引用描述的方法准备棋盘格图案并调用 `cv2.findChessboardCorners()` 和 `cv2.calibrateCamera()` 来获取所需的参数[^3]。
---
###
阅读全文
相关推荐


















