图像畸变矫正代码-Opencv实现

python 复制代码
import cv2
import numpy as np

# 读取图像
image = cv2.imread('distorted_image.jpg')

# 设置相机参数
camera_matrix = np.array([[1000, 0, 320], [0, 1000, 240], [0, 0, 1]])  # 相机内参矩阵
dist_coeffs = np.zeros((4, 1))  # 畸变系数

# 校正畸变
undistorted_image = cv2.undistort(image, camera_matrix, dist_coeffs)

# 显示结果
cv2.imshow('Distorted Image', image)
cv2.imshow('Undistorted Image', undistorted_image)

# 等待按键
cv2.waitKey(0)
cv2.destroyAllWindows()

在这段代码中,假设你已经有了相机的内参矩阵 camera_matrix 和畸变系数 dist_coeffs。函数 cv2.undistort() 接受原始图像、相机内参矩阵和畸变系数作为输入,并返回校正后的图像。请确保将 distorted_image.jpg 替换为你要校正畸变的图像文件名。

相机的内参矩阵(camera matrix)通常表示为一个3x3的矩阵,用来描述相机的内部参数,包括焦距和图像的主点。

内参矩阵的计算通常需要通过相机标定过程获得,这个过程需要一系列已知的特征点(例如棋盘格角点)的图像和它们在真实世界中的位置,通过这些对应关系,可以使用相机标定算法来计算相机的内参矩阵。

在 OpenCV 中,可以使用 cv2.calibrateCamera() 函数进行相机标定,该函数会返回相机内参矩阵以及畸变系数等参数。下面是一个简单的示例:

python 复制代码
import numpy as np
import cv2

# 准备用于相机标定的棋盘格图像及对应的世界坐标
chessboard_images = []  # 存储棋盘格图像
chessboard_corners = []  # 存储棋盘格角点的图像坐标
world_points = []  # 存储棋盘格角点的世界坐标

# 填充 chessboard_images 和 world_points

# 进行相机标定
ret, camera_matrix, dist_coeffs, _, _ = cv2.calibrateCamera(world_points, chessboard_corners, chessboard_images[0].shape[::-1], None, None)

# 输出相机内参矩阵和畸变系数
print("Camera Matrix:")
print(camera_matrix)
print("\nDistortion Coefficients:")
print(dist_coeffs)

畸变系数用于描述相机的镜头畸变,主要包括径向畸变和切向畸变。径向畸变是由于镜头的形状导致的,而切向畸变则是由于相机的镜头与图像平面不平行引起的。

在 OpenCV 中,通常使用五个畸变系数来描述镜头畸变,它们通常被表示为一个长度为5的向量:

k1​,k2​,p1​,p2​,k3​

其中:

  • k1,k2,k3 是径向畸变系数,它们描述了径向畸变的强度。
  • p1,p2 是切向畸变系数,它们描述了切向畸变的程度。

这些系数的计算通常需要通过相机标定来获取,与获取相机内参矩阵类似,需要使用已知的特征点图像坐标和它们对应的世界坐标。在 OpenCV 中,可以使用 cv2.calibrateCamera() 函数进行相机标定,该函数会返回畸变系数等参数。

python 复制代码
import numpy as np
import cv2

# 准备用于相机标定的棋盘格图像及对应的世界坐标
chessboard_images = []  # 存储棋盘格图像
chessboard_corners = []  # 存储棋盘格角点的图像坐标
world_points = []  # 存储棋盘格角点的世界坐标

# 填充 chessboard_images 和 world_points

# 进行相机标定
ret, camera_matrix, dist_coeffs, _, _ = cv2.calibrateCamera(world_points, chessboard_corners, chessboard_images[0].shape[::-1], None, None)

# 输出畸变系数
print("Distortion Coefficients:")
print(dist_coeffs)

cv2.calibrateCamera() 函数返回的 dist_coeffs 就是畸变系数向量。

相关推荐
AI机器学习算法9 小时前
深度学习模型演进:6个里程碑式CNN架构
人工智能·深度学习·cnn·大模型·ai学习路线
Ztopcloud极拓云视角9 小时前
从 OpenRouter 数据看中美 AI 调用量反转:统计口径、模型路由与多云应对方案
人工智能·阿里云·大模型·token·中美ai
AI医影跨模态组学9 小时前
如何将深度学习MTSR与膀胱癌ITGB8/TGF-β/WNT机制建立关联,并进一步解释其与患者预后及肿瘤侵袭、免疫抑制的生物学联系
人工智能·深度学习·论文·医学影像
搬砖的前端10 小时前
AI编辑器开源主模型搭配本地模型辅助对标GPT5.2/GPT5.4/Claude4.6(前端开发专属)
人工智能·开源·claude·mcp·trae·qwen3.6·ops4.6
Python私教10 小时前
Hermes Agent 安全加固与生态扩展:2026-04-23 更新解析
人工智能
饼干哥哥10 小时前
Kimi K2.6 干成了Claude Design国产版,一句话生成电影级的动态品牌网站
人工智能
肖有米XTKF864611 小时前
带货者精品优选模式系统的平台解析
人工智能·信息可视化·团队开发·csdn开发云
天天进步201511 小时前
打破沙盒限制:OpenWork 如何通过权限模型实现安全的系统级调用?
人工智能·安全
xcbrand11 小时前
政府事业机构品牌策划公司找哪家
大数据·人工智能·python
骥龙11 小时前
第十篇:合规与未来展望——构建AI智能体安全标准
人工智能·安全