当前位置: 首页 > 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.lryc.cn/news/601732.html

相关文章:

  • XSS利用
  • Web-Machine-N7靶机攻略
  • 文件权限标记机制在知识安全共享中的应用实践
  • JavaEE初阶第十二期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(十)
  • C++学习(线程相关)
  • 05 - spring security权限控制
  • Java Ai(day04)
  • [Linux入门] Linux 远程访问及控制全解析:从入门到实战
  • 【工具】python汇总发票(含源码)
  • InfluxDB 与 MQTT 协议集成实践(二)
  • Linux网络-------2.应⽤层⾃定义协议与序列化
  • 基于深度学习的图像分割:使用DeepLabv3实现高效分割
  • 【C语言网络编程】HTTP 客户端请求(基于 Socket 的完整实现)
  • 程序代码篇---python向http界面发送数据
  • 【QT入门到晋级】window opencv安装及引入qtcreator(包含两种qt编译器:MSVC和MinGW)
  • 字节前端面试知识点总结
  • 应对反爬机制的具体方法与策略
  • 《 接口日志与异常处理统一设计:AOP与全局异常捕获》
  • Android 调试桥 (adb) 基础知识点
  • 【C 学习】02-究竟什么是C?
  • 【论文阅读】ON THE ROLE OF ATTENTION HEADS IN LARGE LANGUAGE MODEL SAFETY
  • 一文快速了解Docker和命令详解
  • 深度学习中的计算图与自动微分原理:静态图与动态图的实现差异
  • Leetcode力扣解题记录--第136题(查找单数)
  • Springboot+Layui英语单词学习系统的设计与实现
  • MyBatis Plus 分页
  • WiFi Mouse PC端 v1.7.2 官方中文版
  • 《杜甫传》读书笔记与经典摘要(三)流亡与走向人民
  • SPSC无锁环形队列技术(C++)
  • 系统整理Python的循环语句和常用方法