博客
关于我
opencv 形态转换
阅读量:797 次
发布时间:2023-04-03

本文共 1397 字,大约阅读时间需要 4 分钟。

OpenCV形态学操作详解

在图像处理领域,OpenCV提供了丰富的形态学操作(Morphology),这些操作可以用来修改图像的形状和结构。本文将详细介绍几种常见的形态学操作,并提供实际代码示例。

1. 腐蚀(Erosion)

腐蚀是形态学操作中最基本的操作之一。其原理是:图像中的每一个像素(通常为1或0)只有在内核下的所有像素都是1时,才会被认为是1,否则就会变为0。内核是一个小的方阵(如3x3或5x5),用来定义哪些像素会被保留或丢弃。

代码示例:

import cv2 as cvimport numpy as npimg = cv.imread('j.png', 0)  # 读取图像,灰度模式kernel = np.ones((5, 5), np.uint8)  # 定义5x5的单位化内核erosion = cv.erode(img, kernel, iterations=1)  # 应用腐蚀操作,迭代次数为1

结果描述:

在图片中,所有位于边界的像素都会因为内核无法覆盖而被置为0,边缘区域会被消耗掉,形成类似“洞”的效果。

2. 扩张(Dilation)

扩张与腐蚀的作用相反。扩张会增加图像的边缘,类似于膨胀边缘。

代码示例:

dilation = cv.dilate(img, kernel, iterations=1)

结果描述:

边缘区域的像素会被扩展,形成类似“脊带”的效果。

3. 开放(Opening)

开放是腐蚀的一个变种,通常被称为另一种形式的腐蚀。开放操作会去除图像中较小的凹陷,但保留较大的凹陷。

代码示例:

opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)

结果描述:

图像中的小孔洞会被扩大,边缘的凸起部分被保留。

4. 闭合(Closing)

闭合与开放的作用相反。闭合会填补图像中的小孔洞,但会保留较大的凹陷。

代码示例:

closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)

结果描述:

图像中的小孔洞会被填补,边缘的凹陷会被保留。

5. 形态学梯度(Gradient)

形态学梯度运算会计算图像的边界变化率,通常用于检测边界的细节。

代码示例:

gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)

结果描述:

图像的边缘会被强调,显示出图像的细节边缘。

6. 高帽(TopHat)

高帽是一种特殊的形态学操作,用于提取图像中的“帽子”部分,即图像中较高的区域。

代码示例:

tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)

结果描述:

图像中的高区域会被保留,低区域会被消除。

7. 黑帽(Black Hat)

黑帽是高帽的一个变种,用于提取图像中的“帽子”部分,但保留的是图像中较低的区域。

代码示例:

blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)

结果描述:

图像中的低区域会被保留,高区域会被消除。

通过以上形态学操作,可以对图像进行丰富的风格变换和结构修改。这些操作在图像处理、模式识别和特效生成等领域都有广泛应用。

转载地址:http://ggefk.baihongyu.com/

你可能感兴趣的文章
Other User's Bloh Links
查看>>
others
查看>>
Oulipo
查看>>
Outlook 2010 Inside Out
查看>>
outlook 2016 接收发送无法及时收下邮件,如何更改接收时间?
查看>>
Outlook Express could not be started
查看>>
outlook express 故障
查看>>
outlook gmail setting
查看>>
outlook.pst意外删除或丢失的解决办法
查看>>
spring自定义线程池 逻辑 配置 ThreadPoolTaskExecutor corePoolSize maxPoolSize queueCapacity rejectedExecutionHa
查看>>
Outlookbar-style menu interface
查看>>
outlook中XXX.xls附件无法打开解决办法
查看>>
Outlook存档
查看>>
Outlook替代Hotmail:社交很重要,但邮箱是根本
查看>>
Outlook邮箱怎么方便地发送超大附件?
查看>>
outputStream转inputStream
查看>>
overflow:hidden不生效问题
查看>>
overlay(VLAN,VxLAN)、underlay网络、大二层概述
查看>>
Overload和Override的区别?
查看>>
Ovirt添加ISO存储域
查看>>