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

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

目录

一、边缘填充

1、边界复制

2、边界反射

3、边界反射101

4、边界常数

5、边界包裹

二、透视变换

三、图像掩膜

1、制作掩膜

2、与运算

3、颜色替换

 四、ROI切割

 五、图像添加水印


一、边缘填充

        我们对图像进行处理后,需要对空出来的区域进行一个填充,此外、后续的一些图像处理方式也会用到边缘填充

(下面例子会在插值方法后继续操作)

        1、边界复制

cv2.BORDER_REPLICATE

 边界复制会将边界处的像素值进行复制,然后作为边界填充的像素                                                   值,如左图所示,可以看到四周的像素值都一样


         2、边界反射

cv2.BORDER_REFLECT

如左图所示,会根据原图的边缘进行反射


         3、边界反射101

cv2.BORDER_REFLECT_101

与边界反射不同的是,不再反射边缘的像素点,如左图所示


         4、边界常数

cv2.BORDER_CONSTANT

当选择边界常数时,还要指定常数值是多少,默认的填充常数值                                                      为0,如左图所示


        5、边界包裹

cv2.BORDER_WRAP

如左图所示


二、透视变换

        透视变换就是图像矫正,是把一个图像投影到一个新的视平面的过程, 通俗的讲,透视变换的作用其实就是改变一下图像里的目标物体的被观察的视角

M=getPerspectiveTransform(src,dst)

src:原图像上需要进行透视变化的四个点的坐标,这四个点用于定义一个原图中的四边形区域

dst:透视变换后,src的四个点在新目标图像的四个新坐标

该函数会返回一个透视变换矩阵,得到透视变化矩阵之后,使用warpPerspective()函数即可进行透视变化计算,并得到新的图像

cv2.warpPerspective(img, M, dsize, flags, borderMode)

img:输入图像。

M:透视变换矩阵。这个矩阵可以通过getPerspectiveTransform函数计算得到。

dsize:输出图像的大小。它可以是一个Size对象,也可以是一个二元组。

flags:插值方法的标记。

borderMode:边界填充的模式

三、图像掩膜

掩膜(Mask)是一种在图像处理中常见的操作,它用于选择性地遮挡图像的某些部分,以实现特定任务的目标。掩膜通常是一个二值化图像,并且与原图像的大小相同,其中目标区域被设置为1(或白色),而其他区域被设置为0(或黑色),并且目标区域可以根据HSV的颜色范围进行修改

        1、制作掩膜

mask=cv.inRange(img,color_low,color_high)

左图是HSV每个颜色的最大最小值

        2、与运算

当两个命题都是真时,其结果才为真。而在图像处理中,“与”运算被用来对图像的像素值进行操作,掩膜中有很多地方是黑色的,其像素值为0,那么在与原图像进行“与”运算的时候,得到的新图像的对应位置也是黑色的

(任何值与上0(黑) 都等于0,任何值与上1(白) 都等于这个值本身)

cv2.bitwise_and(src1,src2[,mask])

src2第一个输入数组。通常是输入的原始图像

src2:第二个输入数组。它可以是另一个图像、一个常数值或者与 src1 相同的图像

        a. 当应用掩膜时,这个参数经常就是src1本身;即对同一个图像进行操作

        b. 如果对两个不同的图像执行按位与操作(例如,将两张图片的某些部分组合在一起),可             以分别将它们作为 src1src2 输入到 cv2.bitwise_and() 函数中,创建复杂的图像效果               或进行图像合成

mask:掩膜(可选)。输入数组元素只有在该掩膜非零时才被处理。是一个8位单通道的数组,尺寸必须与src1src2相同

返回值:输出数组,应用掩膜后的图像,与输入数组大小和类型相同

        3、颜色替换

由于掩膜与原图的大小相同,并且像素位置一一对应,那么我们就可以得到掩膜中白色(也就是像素值为255)区域的坐标,并将其带入到原图像中,然后就可以修改像素值了,这样就完成了颜色的替换

 四、ROI切割

        ROI:Region of Interest,翻译过来就是感兴趣的区域,就是通过切片实现,对图像局部操作

 五、图像添加水印

        添加水印的概念其实可以理解为将一张图片中的某个物体或者图案提取出来,然后叠加到另一张图片上。具体的操作思想是通过将原始图片转换成灰度图,并进行二值化处理,去除背景部分,得到一个类似掩膜的图像。然后将这个二值化图像与另一张图片中要添加水印的区域进行“与”运算,使得目标物体的形状出现在要添加水印的区域。最后,将得到的目标物体图像与要添加水印的区域进行相加,就完成了添加水印的操作。这样可以实现将一个图像中的某个物体或图案叠加到另一个图像上,从而实现添加水印的效果

(在roi切片区域的修改是直接在原图上修改的,指向的是同一内存地址)

http://www.dtcms.com/a/301303.html

相关文章:

  • 相对路径遍历(CWE-22)
  • 【杂谈】-被引用即被看见:生成式AI如何改写内容规则
  • vscode找不到python解释器的解决方案
  • 8. 若依框架的AjaxResult
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现PCB上二维码检测识别(C#代码UI界面版)
  • 欢乐的周末 - 华为OD统一考试(JavaScript 题解)
  • RAG(检索增强生成)
  • Vue 四个map的使用方法
  • MySQL读写分离部署
  • 【YOLO系列】YOLOv1详解:模型结构、损失函数、训练方法及代码实现
  • 前端面试专栏-前沿技术:31.Serverless与云原生开发
  • Spring AI 项目实战(二十一):Spring Boot + AI +DeepSeek驱动的智能题库系统(附完整源码)
  • Linux-文件与文本管理
  • 【语义分割】记录2:yolo系列
  • Java面试实战:安全框架与大数据技术深度解析
  • 代码随想录算法训练营二十八天|动态规划part01
  • C语言自定义数据类型详解(四)——联合体
  • 欧拉图与欧拉回路
  • Windows---动态链接库Dynamic Link Library(.dll)
  • 裴蜀定理应用
  • Ubuntu Linux 如何配置虚拟内存 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录8
  • GRPO强化学习缓解多模态大模型OCR任务的幻觉思路及数据生成思路
  • 【Oracle】Oracle分区表“排雷“指南:当ORA-14400错误找上门时如何优雅应对
  • 【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
  • 【Web安全】深入浅出理解“SQL注入-伪静态注入”及空格限制绕过技巧
  • linux 板卡实现vxi11服务
  • Qwen3安装使用教程:引领推理型大模型新时代
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-35,(知识点:三极管知识点,电路电压计算题,三极管电压计算,PNP三极管)
  • linux 部署 flink 1.15.1 并提交作业
  • 数据上新|最新省、地级市农业新质生产力2002-2025