当前位置: 首页 > news >正文

Python-初学openCV——图像预处理(二)

目录

一、图像仿射变换

1、基本性质

二、cv2.warpAffine() 函数

1、图像旋转

2、图像平移

3、图像缩放

4、图像剪切

三、 插值方法

1、最近邻插值

2、双线性插值

3、像素区域插值 

4、双三次插值 

5、Lanczos插值


一、图像仿射变换

仿射变换(Affine Transformation)是一种线性变换,保持了点之间的相对距离不变

        1、基本性质

                保持直线

                保持平行

                比例不变性

                不保持角度和长度

二、cv2.warpAffine() 函数

      cv2.warpAffine() 是 OpenCV 中用来对图像进行仿射变换的函数。仿射变换是一种保               直线和比例的变换,可以包括平移、旋转、缩放和倾斜等操作

#仿射变换函数
cv2.warpAffine(img,M,dsize)

参数:

img:输入图像

M:2x3的变换矩阵,类型为np.float32

dsize:输出图像的尺寸,形式为(width,height)

        1、图像旋转

                旋转图像可以将图像绕着某个点旋转一定的角度

                cv2.getRotationMatrix2D()函数

cv2.getRotationMatrix2D(center,angle,scale)

参数:

center:旋转中心点的坐标,格式为(x,y)

angle:旋转角度,单位为度,正值表示逆时针旋转、负值表示顺时针旋转

scale:缩放比例,若设为1,则不缩放

返回值(M):2x3的旋转矩阵

        2、图像平移

                 平移操作可以将图像中的每个点沿着某个方向移动一定的距离 

         3、图像缩放

                缩放操作可以改变图片的大小

        4、图像剪切

                剪切操作可以改变图形的形状,以便其在某个方向上倾斜,它将对象的形状改变为斜边            平行四边形,而不改变其面积

 

三、 插值方法

插值(Interpolation)是一种通过已知数据点之间的推断或估计来获取新数据点的方法,在图像处理中常用于处理图像的放大、缩小、旋转、变形等操作,以及处理图像中的像素值

图像插值算法是为了解决图像缩放或者旋转等操作时,由于像素之间的间隔不一致而导致的信息丢失和图像质量下降的问题。当我们对图像进行缩放或旋转等操作时,需要在新的像素位置上计算出对应的像素值,而插值算法的作用就是根据已知的像素值来推测未知位置的像素值

方法邻域大小平滑度计算速度适用场景
最近邻1 x 1最差最快像素艺术、实时预览
双线性2 x 2中等中等通用缩放
双三次4 x 4最佳最慢高质量放大/缩小
像素区域动态区域中等缩小抗锯齿

       

1、最近邻插值

CV2.INTER_NEAREST

原理与步骤

        距离计算:对于待插值的位置(如图像中的非整数坐标点),计算它与所有已知数据点的距                              离(通常用欧氏距离)。

        最近点选择:找到距离最近的那个已知数据点。

        赋值:直接将该最近点的值赋给待插值位置。

(最近邻插值适合对速度要求高、对质量要求低的场景)

        2、双线性插值

CV2.INTER_LINEAR

双线性插值(Bilinear interpolation)是图像缩放、旋转、几何校正中最常用的一种平滑插值方法。它通过两次一维线性插值(先水平、后垂直)来计算目标点的值,避免了最近邻插值的“锯齿”问题

        3、像素区域插值 

cv2.INTER_AREA

一种专为图像缩小(下采样)设计的插值方法。把目标图像的一个像素,反向映射回原图对应的一个“区域”,然后取该区域所有原像素的平均值作为结果

缩小图像时,一个目标像素可能覆盖原图的多个像素(例如缩小 50% 时,1 个目标像素对应原图 2×2=4 个像素)像素区域插值通过“区域平均”强制抗锯齿,效果更自然

        4、双三次插值 

cv2.INTER_CUBIC

双三次插值(Bicubic interpolation)是一种高阶、平滑的二维插值方法,通过对目标点周围 16 个(4×4)已知像素 进行三次多项式加权来得到插值结果。它是图像处理中放大图像时质量最好的算法之一

        5、Lanczos插值

cv2.INTER_LANCZOS4

Lanczos插值方法与双三次插值的思想是一样的,不同的就是其需要的原图像周围的像素点的范围变成了8*8,并且不再使用BiCubic函数来计算权重,而是换了一个公式计算权重

http://www.lryc.cn/news/598210.html

相关文章:

  • 服务器带宽具体是指什么意思?
  • 硅基计划3.0 学习总结 贰 顺序表与链表
  • 图论:搜索问题
  • 深度分析Android多线程编程
  • Leetcode力扣解题记录--第2题(加法模拟)
  • ESP32S3 Ubuntu vscode如何使用USB-JTAG调试
  • 【开源】WPF的数据可视化大屏解决方案——WpfMap
  • C++课设实践项目:C++构建的学籍管理系统
  • Cisco 主模式配置
  • SGLang + 分布式推理部署DeepSeek671B满血版
  • JavaSE:开发环境的搭建(Eclipse)
  • Java与NLP实战:文本处理到情感分析全解析
  • 【ECharts✨】解决Vue 中 v-show 导致组件 ECharts 样式异常问题
  • [AI 生成] Flink 面试题
  • 【论文阅读】REVISITING DEEP AUDIO-TEXT RETRIEVAL THROUGH THE LENS OF TRANSPORTATION
  • 基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
  • 人形机器人加快先进AI机器人开发
  • 开发避坑短篇(5):vue el-date-picker 设置默认开始结束时间
  • 实时云渲染将UE像素流嵌入业务系统,实现二维管理系统与数字孪生三维可视化程序的无缝交互
  • 小程序生命周期及页面操作执行过程详解
  • 使用phpstudy极简快速安装mysql
  • Java进阶3:Java集合框架、ArrayList、LinkedList、HashSet、HashMap和他们的迭代器
  • Android集成Google Map
  • C++中std::list的使用详解和综合实战代码示例
  • RPG64.制作敌人攻击波数四:优化
  • vue 项目中 components 和 views 包下的组件功能区别对比,示例演示
  • vue递归树形结构删除不符合数据 生成一个新数组
  • 基于深度学习的图像分类:使用MobileNet实现高效分类
  • 【SpringAI实战】提示词工程实现哄哄模拟器
  • MCNN-BiLSTM-Attention分类预测模型等!