IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OpenCV python 形态学操作 morphologyEx -> 正文阅读

[人工智能]OpenCV python 形态学操作 morphologyEx

OPENCV形态学

  • 腐蚀(或侵蚀)
  • 膨胀(或扩张)
  • 开运算
  • 闭运算
  • 顶帽
  • 黑帽
  • 梯度图
  • OpenCV API:CV2.morphologyEx

腐蚀

作用:
腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除。
它通过使图像沿着边界向内收缩,达到消除边界点的目的。一般输入图像为二值图像。
腐蚀操作是将像素点与卷积核函数做与运算,只有全1时(或最小值)才保留这个像素点,否则则舍弃这个点。

语法格式

dst = cv2.erode(src, k, anchor, iterations, boderType, boderValue)
  • src: 输入的原图像
  • k: kernel代表腐蚀操作时所采用的结构类型,它可以自定义生成,也可以通过函数cv2.getStructuringElement()生成。
  • anchor: anchor代表element结构中锚点的位置。该值默认为(-1,-1),在核的中心位置。
  • iterations : iteration是是腐蚀操作迭代的次数,该值默认为1,即进行一次腐蚀操作。
  • boderType: 扩充边界的模式,缺省是NoneT,表示不进行边界扩充
  • boderValue:边界值,一般使用默认值。当borderType=cv2.BORDER_CONSTANT时,扩充边界的元素以borderValue填充

膨胀

作用:
是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填补物体中的空洞.

膨胀过程是有一个结构元素或者模板去在原图像素做滑动,中心像素位置的值根据其邻域取或运算,或运算为1,则为1,否则为0。(或最大值)

语法格式

dst = cv2.dilate(src,kernel,iterations, boderType, boderValue)
  • src: 输入的原图像
  • k: kernel代表腐蚀操作时所采用的结构类型,它可以自定义生成,也可以通过函数cv2.getStructuringElement()生成。
  • anchor: anchor代表element结构中锚点的位置。该值默认为(-1,-1),在核的中心位置。
  • iterations : iteration是是腐蚀操作迭代的次数,该值默认为1,即进行一次腐蚀操作。
  • boderType: 扩充边界的模式,缺省是NoneT,表示不进行边界扩充
  • boderValue:边界值,一般使用默认值。当borderType=cv2.BORDER_CONSTANT时,扩充边界的元素以borderValue填充

自定义kernel、anchor、borderValue

kernel

kernel核矩阵可以通过getStructuringElement函数构建,也可以自己单独构建。

单独构建:

kernel = np.ones((ksize,ksize),np.uint8) 

getStructuringElement 构建
通过getStructuringElement构建时,可以传入两个参数,对应语法如下:

getStructuringElement(shape, ksize, anchor=None)
  • 参数shape表示核的形状,有如下三个取值:

    1. cv2.MORPH_RECT:长方形或正方形矩阵,矩阵中每个元素都为1。如图为一个5*5的正方形矩阵:
      请添加图片描述
    2. cv2.MORPH_CROSS:内置十字形矩阵,矩阵中和锚点同一列或同一行的每个元素都为1,其他元素都为0。下图为一个锚点为(2,3)的5*5内置十字形矩阵:
      请添加图片描述
    3. cv2.MORPH_ELLIPSE:内接椭圆形矩阵,矩阵中为1的元素构成一个椭圆,为该矩阵对应长方形的内接椭圆。下图为一个5*5内接椭圆矩阵:
      请添加图片描述
  • 参数ksize:矩阵的大小,表示宽和高的二元组,(3,3)表示3行3列矩阵,(6,4)表示4行6列的核矩阵

  • anchor:矩阵锚点,当shape为MORPH_CROSS时需要使用锚点的坐标

  • 返回值:构造的矩阵

锚点anchor 位置对膨胀腐蚀的影响

在这里插入图片描述
腐蚀或膨胀的操作:用结构元素(kernel)的锚点位置对齐图像的像素点,然后逐个从左到右至上而下的滑动到每个像素。结构元素中为1的各个坐标格子会与相应的像素对齐。
腐蚀操作就是取其中的最小值,代替原素像素值
膨胀操作则就是取其中的最大值,用最大值代替原像素

锚点就是:位置对齐图像的像素点

borderType、borderValue

bordType取值含义

cv2.BORDER_WRAP:不能在腐蚀和膨胀函数中使用,官方文档有明确说明
请添加图片描述
部分内容引自

https://blog.csdn.net/weixin_43990954/article/details/102723240?ops_request_misc=&request_id=&biz_id=102&utm_term=python%20opencv%E8%85%90%E8%9A%80anchor&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-102723240.142v32down_rank,185v2control&spm=1018.2226.3001.4187

原文中有实验与图解

开运算

原理作用
开运算是通过先对图像腐蚀再膨胀实现的。能够去除白色噪点,可以用来消除亮度较高的细小区域,在纤细处分离物体。

dst =cv2.dilate(cv2.erode(src,kernel),kernel)

闭运算

原理作用
开运算是通过先对图像膨胀再腐蚀实现的。能够去除黑色噪点,填充白色物体内细小黑色的空洞区域,也可以用来连接临近物体。

dst = cv2.erode(cv2.dilate(src,kernel),kernel)

梯度图

原理作用
能够保留物体的边缘轮廓

膨胀结果-腐蚀结果

经典示例:
在这里插入图片描述

顶帽

原理作用
其结果图像为开运算图与原图像的差
顶帽可以用来分离比邻近区域亮一些的线条或噪点
当一幅图像具有大幅的背景(如黑底)的时候,可以使用顶帽运算提取暗背景下的亮色点或线等物体。

原图
原图
结果
结果

黑帽

原理作用

其结果图像为闭运算图与原图像的差
因此黑帽运算可以用于提取亮背景中的细小暗物体。(去水印)

形态学函数 cv2.morphologyEx()

dst = morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

Parameters:

  • src – Source image
  • dst – Destination image. It will have the same size and the same type as src element – Structuring element
  • op –Type of morphological operation, one of the following:
    cv2.MORPH_ERODE 腐蚀
    cv2.MORPH_DILATE 膨胀
    cv2.MORPH_OPEN 开运算
    cv2.MORPH_CLOSE 闭运算
    cv2.MORPH_GRADIENT 形态学梯度
    cv2.MORPH_TOPHAT 顶帽
    cv2.MORPH_BLACKHAT 黑帽
    cv2.MORPH_HITMISS “hit or miss” . Only supported for CV_8UC1 binary images. A tutorial can be found in the documentation 击中击不中
  • iterations – Number of times erosion and dilation are applied
  • borderType – The pixel extrapolation method; see borderInterpolate()
  • borderValue – The border value in case of a constant border. The default value has a special meaning
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:23:46  更:2022-07-17 16:25:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:53:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码