OpenCV 缩放 与 位移

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=ac​bd​tx​ty​​

  • 参数原理详解 :
    • a 和 d(对角线上的 1) :
      控制缩放。值为 1 表示保持原比例,不缩放;如果为 2,则对应方向拉长 2 倍。
    • b 和 c(非对角线上的 0) :
      控制旋转与倾斜(错切) 。值为 0 表示水平轴与垂直轴互不干扰,图像不会发生旋转或斜拉。如果旋转,它们会变成 sin(θ) 和 -sin(θ) 的值。
    • tx(第一行的第三个数) :
      控制水平平移。值为正数表示向右移动,为负数表示向左移动。
    • ty(第二行的第三个数) :
      控制垂直平移。值为正数表示向下移动,为负数表示向上移动(因为计算机图像坐标系原点在左上角,Y轴向下为正)。
相关推荐
长不大的杨瑞杰1 小时前
OpenCode v2 GitLab 集成实战:Issue 驱动开发、MR 审查与 CI/CD 最小权限
人工智能·ci/cd·gitlab·ai编程·opencode
深蓝AI2 小时前
美团 LongCat-2.5 拆解:1.6T 参数只激活 3%,1M 上下文卖 0.3 美元,Agent 模型的账变了
人工智能·llm
小和尚同志7 小时前
54.6k star 的 Multica: 集多 Agent 和看板于一体的 AI 平台
人工智能·aigc·three.js
一枕槐安4877 小时前
少样本提示(Few-shot)在业务场景的落地实践
大数据·人工智能·意图分类·mmr多样性·knn检索·动态示例选择
王中阳Go8 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
海宇AI8 小时前
零信任架构实战:基于海宇个人风险报告构建自动化分期商城信用额度初审网关
运维·人工智能·架构·自动化
tellmewhoisi9 小时前
深度学习32:卷积神经网络:卷积层(卷积运算,填充,步幅)
人工智能·深度学习·cnn
weixin_307779139 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
Sinokap9 小时前
OpenAI 披露 AI 安全实验:智能体如何突破隔离边界?
人工智能·安全