江苏10大网站建设公司,文化厅加强网站建设,ngrok做网站服务器,电子商务网站建设教材Python OpenCV 系列#xff1a;图像的几何变换
引言
在图像处理领域#xff0c;几何变换是一个非常重要的操作#xff0c;它可以改变图像的位置、大小、方向或形状。在计算机视觉中#xff0c;这些操作对于图像预处理、特征提取和图像增强至关重要。本文将介绍如何利用 …Python OpenCV 系列图像的几何变换
引言
在图像处理领域几何变换是一个非常重要的操作它可以改变图像的位置、大小、方向或形状。在计算机视觉中这些操作对于图像预处理、特征提取和图像增强至关重要。本文将介绍如何利用 Python 的 OpenCV 库实现图像的几何变换包括平移、旋转、缩放、仿射变换和透视变换。 1. 什么是几何变换
几何变换是通过数学变换将图像的像素从一个位置映射到另一个位置的过程。根据变换的性质可以将其分为以下几类
平移移动图像位置。缩放调整图像尺寸。旋转改变图像方向。仿射变换对图像进行线性变换包括平移、旋转、缩放和倾斜。透视变换改变图像的视角使其产生三维效果。 2. OpenCV 几何变换基本操作
2.1 平移
平移是将图像沿 x 和 y 轴移动公式如下 [ x ′ y ′ ] [ x y ] [ t x t y ] \begin{bmatrix} x \\ y \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} \begin{bmatrix} tx \\ ty \end{bmatrix} [x′y′][xy][txty]
在 OpenCV 中实现
import cv2
import numpy as np# 读取图像
img cv2.imread(image.jpg)# 定义平移矩阵 [1, 0, tx] 和 [0, 1, ty]
tx, ty 100, 50
M np.float32([[1, 0, tx], [0, 1, ty]])# 执行平移变换
shifted cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))cv2.imshow(Shifted Image, shifted)
cv2.waitKey(0)
cv2.destroyAllWindows()2.2 缩放
缩放是按比例放大或缩小图像尺寸。在 OpenCV 中使用 cv2.resize()
# 缩放图像到指定大小
resized cv2.resize(img, (300, 200))# 按比例缩放
scaled cv2.resize(img, None, fx0.5, fy0.5, interpolationcv2.INTER_LINEAR)2.3 旋转
旋转变换公式 [ x ′ y ′ ] [ cos θ − sin θ sin θ cos θ ] [ x y ] \begin{bmatrix} x \\ y \end{bmatrix} \begin{bmatrix} \cos\theta -\sin\theta \\ \sin\theta \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [x′y′][cosθsinθ−sinθcosθ][xy]
在 OpenCV 中实现
(h, w) img.shape[:2]
center (w // 2, h // 2)# 生成旋转矩阵
angle 45
scale 1.0
M cv2.getRotationMatrix2D(center, angle, scale)# 执行旋转
rotated cv2.warpAffine(img, M, (w, h))2.4 仿射变换
仿射变换通过三个点的映射定义图像变换。在 OpenCV 中使用 cv2.getAffineTransform()
# 定义原图像和目标图像的三个点
pts1 np.float32([[50, 50], [200, 50], [50, 200]])
pts2 np.float32([[10, 100], [200, 50], [100, 250]])# 获取仿射变换矩阵
M cv2.getAffineTransform(pts1, pts2)# 执行仿射变换
affined cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))2.5 透视变换
透视变换通过四个点定义可以改变图像的视角
# 定义原图像和目标图像的四个点
pts1 np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts2 np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])# 获取透视变换矩阵
M cv2.getPerspectiveTransform(pts1, pts2)# 执行透视变换
warped cv2.warpPerspective(img, M, (300, 300))3. 实用技巧与注意事项
边界处理几何变换可能会导致部分像素超出边界建议在设计时考虑图像的大小。插值方法 cv2.INTER_NEAREST最近邻插值速度快但效果较差。cv2.INTER_LINEAR双线性插值适用于缩放。cv2.INTER_CUBIC三次插值适合高质量变换。 变换顺序如果需要同时进行多个几何变换如旋转后平移可以通过矩阵乘法将多个变换合并。 4. 应用场景
图像校正修正拍摄中的倾斜、畸变。特征对齐人脸识别中常用仿射变换将人脸对齐。数据增强通过随机几何变换扩展数据集用于训练深度学习模型。视觉特效制作图像的动态效果或艺术处理。 5. 总结
几何变换是图像处理中不可或缺的工具OpenCV 提供了高效的方法来实现各种变换操作。在理解每种变换的数学原理后可以根据应用场景灵活组合这些技术从而完成更复杂的图像处理任务。希望这篇文章能够帮助你更好地掌握 Python OpenCV 中的几何变换操作