1. 图像缩放函数
- 函数 :
cv2.resize(src, dsize[, fx[, fy[, interpolation]]]) - 定义 :将图像缩放(放大或缩小)到指定的尺寸。如果只传了
dsize就按目标尺寸缩放;如果dsize为(0,0),则根据fx和fy的比例系数进行缩放。 - 参数 :
src:需要被缩放的输入图像。dsize:目标图像的尺寸(宽、高),通常格式为(width, height)。interpolation:可选参数,指定缩放时使用的插值算法(即下方的cv2.INTER_*参数)。
2. 缩放算法参数(插值方法)
-
最近邻插值
- 函数参数 :
cv2.INTER_NEAREST - 特点:速度最快,效果差。
- 原理讲解 :
最粗暴的缩放方法。当计算目标像素的颜色时,它直接去原图里寻找空间上距离最近的一个像素,把这个像素的颜色值直接"复制"过来。因为完全不考虑周围的过渡,计算量极小、速度极快,但放大图像时会产生严重的锯齿(马赛克效应)。
- 函数参数 :
-
双线性插值
- 函数参数 :
cv2.INTER_LINEAR - 特点:最常用的折中方案,使用原图中的 4 个点。
- 原理讲解 :
日常最常用的默认算法。当目标像素落在原图的像素网格之间时,它会选取周围距离最近的 4 个像素点 (构成一个 2x2 的小网格)。然后根据目标点距离这 4 个点的远近来分配权重(离得近的权重高,离得远的权重低),最后将 4 个点的颜色值进行加权求和得出最终结果。这种方法能很好地消除锯齿,在速度和画质之间取得了很好的平衡。
- 函数参数 :
-
三次插值(双三次插值)
- 函数参数 :
cv2.INTER_CUBIC - 特点:效果更好,但速度较慢,使用原图中的 16 个点。
- 原理讲解 :
高质量的插值算法。它把计算范围扩大了,选取目标点周围 4x4 网格内的 16 个像素点参与计算。不仅计算了距离权重,还考虑了像素变化的梯度,对这 16 个点进行复杂的多项式拟合。这样计算出的过渡曲线极其平滑,能完美保留边缘的圆润度,但计算量比双线性插值大得多。
- 函数参数 :
-
区域插值(像素面积关系法)
- 函数参数 :
cv2.INTER_AREA - 特点:效果最好(专门针对缩小图像优化)。
- 原理讲解 :
专门为了缩小图像 而设计的算法。它的核心是从"面积"的角度来计算,当把大图缩小为小图时,小图的一个像素对应了原图的一大块面积。该算法会计算出原图中这块面积内所有像素的覆盖比例 ,然后对这些像素进行加权平均。这种方法能最大程度避免缩小图像时产生的摩尔纹和像素混叠,保留最真实的纹理细节。
- 函数参数 :
- 镜像翻转
- 函数 :
cv2.flip(src, flipCode[, dst]) - 定义:将图像沿着指定的轴进行镜像翻转(支持水平、垂直或双向同时翻转)。
- 参数 :
src:输入图像。flipCode:整数标志位,用于指定翻转的模式(0 表示上下/垂直翻转;1 表示左右/水平翻转;-1 表示同时上下左右翻转)。dst:可选参数,用于存储输出结果。
- 函数 :
- 图像旋转(仅支持90度倍数)
- 函数 :
cv2.rotate(src, rotateCode[, dst]) - 定义 :将图像整体进行 90 度倍数的快速旋转。注意,这不是任意角度的旋转,它仅支持 90°、180° 和 270° 的旋转,计算速度极快且不需要指定旋转中心。
- 参数 :
src:输入图像。rotateCode:指定旋转方向的标志位(cv2.ROTATE_90_CLOCKWISE 表示顺时针旋转90°;cv2.ROTATE_180 表示旋转180°;cv2.ROTATE_90_COUNTERCLOCKWISE 表示逆时针旋转90°)。dst:可选参数,用于存储输出结果。
- 函数 :
1. 仿射变换函数
- 函数 :
cv2.warpAffine(src, M, dsize[, flags[, borderMode[, borderValue]]]) - 定义:通过一个 2x3 的变换矩阵,对图像进行线性几何变换(如平移、旋转、缩放、错切等)。
- 核心参数 :
src:输入的原图像。M:2x3 的变换矩阵(包含平移、旋转、缩放的所有指令)。dsize:输出图像的尺寸,格式为(宽度, 高度)的元组。
2. 2x3 变换矩阵
- 矩阵结构 :由一个 2x2 的基础变换矩阵 (控制旋转和缩放)和一个 2x1 的平移向量(控制位移)拼接而成。
- 数学模型:
M=abtxcdtyM=acbdtxty
- 参数原理详解 :
a和d(对角线上的 1) :
控制缩放。值为 1 表示保持原比例,不缩放;如果为 2,则对应方向拉长 2 倍。b和c(非对角线上的 0) :
控制旋转与倾斜(错切) 。值为 0 表示水平轴与垂直轴互不干扰,图像不会发生旋转或斜拉。如果旋转,它们会变成sin(θ)和-sin(θ)的值。tx(第一行的第三个数) :
控制水平平移。值为正数表示向右移动,为负数表示向左移动。ty(第二行的第三个数) :
控制垂直平移。值为正数表示向下移动,为负数表示向上移动(因为计算机图像坐标系原点在左上角,Y轴向下为正)。