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

相关文章:

  • 01人工智能中优雅草商业实战项目视频字幕翻译以及声音转译之底层处理逻辑阐述-卓伊凡|莉莉
  • Python 数据分析(四):Pandas 进阶
  • macOS配置 GO语言环境
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情分析实现
  • Linux 系统网络配置及 IP 地址相关知识汇总
  • 八股文Kafka学习
  • 哈希表应用(map,set共同作用)
  • 基于 KNN 算法的手写数字识别项目实践
  • DAY21-二叉树的遍历方式
  • vuhub jangow-01-1.0.1靶场攻略
  • 简易 BMI 身体质量指数计算器
  • C++算法竞赛篇(六)一维数组题型讲解
  • 用哈希表封装Myunordered_map和Myunordered_set
  • mac neo4j install verifcation
  • mac配置多版本jdk
  • Python 列表推导式与生成器表达式
  • 【成功经验分享】Github Education (Github学生认证)认证
  • 数据江湖的“三国演义”:数据仓库、数据湖与湖仓一体的全景对比
  • RAG vs 微调
  • 使用uni-app开发一个点餐收银台系统前端静态项目练习
  • C 语言第 10 天学习笔记:字符串基础操作与相关函数
  • 机器学习特征选择 explanation and illustration of ANOVA
  • java开闭原则 open-closed principle
  • 影刀RPA_初级课程_玩转影刀自动化_网页操作自动化
  • 【机器学习深度学习】NLP评价指标 BLEU 和 ROUGE
  • python优秀案例:基于python flask实现的小说文本数据分析与挖掘系统,包括K-means聚类算法和LDA主题分析
  • 用KNN实现手写数字识别:基于 OpenCV 和 scikit-learn 的实战教学 (超级超级超级简单)
  • Kafka——消费者组消费进度监控都怎么实现?
  • 牛客周赛101 D题 题解
  • 五、搭建springCloudAlibaba2021.1版本分布式微服务-gateway网关