opencv36-形态学操作-膨胀 cv2.dilate()

news2024/11/18 7:51:14

膨胀操作是形态学中另外一种基本的操作。膨胀操作和腐蚀操作的作用是相反的,膨胀操作能对图像的边界进行扩张。膨胀操作将与当前对象(前景)接触到的背景点合并到当前对象内,从而实现将图像的边界点向外扩张。如果图像内两个对象的距离较近,那么在膨胀的过程中,两个对象可能会连通在一起。膨胀操作对填补图像分割后图像内所存在的空白相当有帮助。

原理:

二值图像的膨胀示例如图 8-8 所示。

同腐蚀过程一样,在膨胀过程中,也是使用一个结构元来逐个像素地扫描要被膨胀的图像,并根据结构元和待膨胀图像的关系来确定膨胀结果。

在这里插入图片描述
例如,在图 8-9 中,整幅图像的背景色是黑色的,前景对象是一个白色的圆形。图像左上角的深色小块表示遍历图像所使用的结构元。在膨胀过程中,要将该结构元逐个像素地遍历整幅图像,并根据结构元与待膨胀图像的关系,来确定膨胀结果图像中与结构元中心点对应位置像素点的值。

在这里插入图片描述

图 8-10 中的两幅图像代表结构元与前景色的两种不同关系。根据这两种不同关系来决定
膨胀结果图像中,与结构元中心像素重合的点的像素值。

  1. 如果结构元中任意一点处于前景图像中,就将膨胀结果图像中对应像素点处理为前景色。
  2. 如果结构元完全处于背景图像外,就将膨胀结果图像中对应像素点处理为背景色。

在这里插入图片描述
针对图 8-10 中的图像,膨胀的结果就是前景对象的白色圆直径变大。上述结构元也被称为核。

例如,有待膨胀的图像 img,其值为:

[[0 0 0 0 0]
[0 0 0 0 0]
[0 1 1 1 0]
[0 0 0 0 0]
[0 0 0 0 0]]

有一个结构元 kernel,其值为:

[[1]
[1]
[1]]

如果使用结构元 kernel 对图像 img 进行膨胀,则可以得到膨胀结果图像 rst:

[[0 0 0 0 0]
[0 1 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]
[0 0 0 0 0]]

这是因为当结构元 kernel 在图像 img 内逐个像素地进行遍历时,当核 kernel 的中心点 kernel[1,0]位于 img 中的 img[1,1]、img[1,2]、img[1,3]、img[2,1]、img[2,2]、img[2,3]、img[3,1]、img[3,2]或 img[3,3]处时,核内像素点都存在与前景对象重合的像素点。所以,在膨胀结果图像中,这 9 个像素点的值被处理为 1,其余像素点的值被处理为 0。

上述示例的示意图如图 8-11 所示,其中:

  • 图(a)表示待膨胀的 img。

  • 图(b)是核 kernel。

  • 图©中的阴影部分是 kernel 在遍历 img 时,kernel 中心像素点位于 img[1,1]、img[3,3]
    时与前景色存在重合像素点的两种可能情况,实际上共有 9 个这样的与前景对象重合的可能位置。核 kernel 的中心分别位于 img[1,1]、img[1,2]、img[1,3]、img[2,1]、img[2,2]、
    img[2,3]、img[3,1]、img[3,2]或 img[3,3]时,核内像素点都存在与前景图像重合的像素点。

  • 图(d)是膨胀结果图像 rst。在 kernel 内,当任意一个像素点与前景对象重合时,其中心点所对应的膨胀结果图像内的像素点值的为 1;当 kernel 与前景对象完全无重合时,其中心点对应的膨胀结果图像内像素点的值为 0。

在这里插入图片描述

函数说明:

在 OpenCV 内,采用函数 cv2.dilate()实现对图像的膨胀操作,该函数的语法结构为:

dst = cv2.dilate( src, kernel[, anchor[, iterations[, borderType[,
borderValue]]]])

式中:

  • dst 代表膨胀后所输出的目标图像,该图像和原始图像具有同样的类型和大小。
  • src 代表需要进行膨胀操作的原始图像。图像的通道数可以是任意的,但是要求图像的深度必须是 CV_8U、CV_16U、CV_16S、CV_32F、CV_64F 中的一种。
  • element 代表膨胀操作所采用的结构类型。它可以自定义生成,也可以通过函数cv2.getStructuringElement()生成。
    参数 kernel、anchor、iterations、borderType、borderValue 与函数 cv2.erode()内相应参数的含义一致。

代码示例:使用数组演示膨胀的基本原理

import cv2
import numpy as np
img=np.zeros((5,5),np.uint8)
img[2:3,1:4]=1
kernel = np.ones((3,1),np.uint8)
#对图像进行膨胀操作
dilation = cv2.dilate(img,kernel)
print("img=\n",img)
print("kernel=\n",kernel)
print("dilation\n",dilation)

运行结果:

img=
 [[0 0 0 0 0]
 [0 0 0 0 0]
 [0 1 1 1 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]
kernel=
 [[1]
 [1]
 [1]]
dilation
 [[0 0 0 0 0]
 [0 1 1 1 0]
 [0 1 1 1 0]
 [0 1 1 1 0]
 [0 0 0 0 0]]

从本例中可以看到,只要当核 kernel 的任意一点处于前景图像中时,就将当前中心点所对应的膨胀结果图像内像素点的值置为 1。

示例2:使用函数 cv2.dilate()完成图像膨胀操作。

在这里插入图片描述
代码如下;

import cv2
import numpy as np
o=cv2.imread("dilation.bmp",cv2.IMREAD_UNCHANGED)
kernel = np.ones((9,9),np.uint8)
dilation = cv2.dilate(o,kernel)
cv2.imshow("original",o)
cv2.imshow("dilation",dilation)
cv2.waitKey()
cv2.destroyAllWindows()

在本例中,使用语句 kernel=np.ones((9,9),np.uint8)生成 9×9 的核,来对原始图像进行膨胀操作。

运行结果:

左图是原始图像,右图是膨胀处理结果。从图中可以看到,膨胀操作将原始图像“变粗”了。
在这里插入图片描述

示例3:调节函数 cv2.dilate()的参数,观察不同参数控制下的图像膨胀效果。

import cv2
import numpy as np
o=cv2.imread("dilation.bmp",cv2.IMREAD_UNCHANGED)
kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(o,kernel,iterations = 9)
cv2.imshow("original",o)
cv2.imshow("dilation", dilation)
cv2.waitKey()
cv2.destroyAllWindows()

在本例中,参数做了两个调整:

  • 核的大小变为 5×5。
  • 使用语句 iterations = 9 对迭代次数进行控制,让膨胀重复 9 次。

运行结果:

在这里插入图片描述
左图是原始图像,右图是膨胀处理结果。从图中
可以看到,膨胀操作让原始图像实现了“生长”。在本例中,由于重复了 9 次,所以图像被膨胀得更严重了。

更多的操作自己多动手实验感受一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/831351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口测试原理和基本步骤

目录 1、接口测试原理 2、接口测试的实现 3、接口测试用例 4、接口测试工具 5、HTTP协议 6、JMeter 7、抓包 8、接口测试可以发现什么样的Bug? 1、接口测试原理 接口测试,实际上是针对于接口做测试的。 那么接口是什么? 软件开发&…

人力管理系统servlet+jsp人事考勤员工部门java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 人力管理系统servletjsp 系统有1权限:管理…

Linux - gcc/g++工具使用

gcc/g是用于编译C/C程序的编译器 1.编译过程 1. 预处理(头文件展开,条件编译,进行宏替换,去注释等) 2. 编译(C语言汇编语言) 3. 汇编(汇编->可重定位目标二进制文件,不可以被执行的&#xff…

图解系列 非对称加密应用场景

非对称加密使用一对密钥,分别是公钥(public key)和私钥(private key)。 使用场景 加密场景 加密场景 公钥加密、私钥解密: 公钥加密:在这种场景下,使用接收方的公钥对数据进行加密…

Spring源码解析(六):bean定义后置处理器ConfigurationClassPostProcessor

Spring源码系列文章 Spring源码解析(一):环境搭建 Spring源码解析(二):bean容器的创建、默认后置处理器、扫描包路径bean Spring源码解析(三):bean容器的刷新 Spring源码解析(四):单例bean的创建流程 Spring源码解析(五)&…

数据结构 | 搜索和排序——排序

目录 一、冒泡排序 二、选择排序 三、插入排序 四、希尔排序 五、归并排序 六、快速排序 排序是指将集合中的元素按照某种顺序排序的过程。 一、冒泡排序 冒泡排序多次遍历列表。它比较相邻的元素,将不合顺序的交换。每一轮遍历都将下一个最大值放到正确的位…

校园跑腿小程序运营攻略

作为一名校园跑腿小程序的运营者,你可能会面临诸如用户获取、平台推广、服务质量保证等挑战。在本篇推文中,我将为你提供一些关键的运营策略,帮助你成功运营校园跑腿小程序。 1. 用户获取和留存 用户是校园跑腿小程序成功的关键。以下是一些…

非凸科技受邀参加中科大线上量化分享

7月30日,非凸科技受邀参加由中国科学技术大学管理学院学生会、超级量化共同组织的“打开量化私募的黑箱”线上活动,分享量化前沿以及求职经验,助力同学们拿到心仪的offer。 活动上,非凸科技量化策略负责人陆一洲从多个角度分享了如…

基于Windows手动编译openssl和直接安装openssl

零、环境 win10-64位 VS2019 一、手动编译 1、安装perl https://platform.activestate.com/ActiveState-Projects/ActiveState-Perl-5.36.0 两种方法都没能成功。。第一种下载后会得到一个 state-remote-installer.exe,然后安装时会在命令行中执行,…

PtahDAO:全球首个DAO治理资产信托计划的金融平台

金融科技是当今世界最具创新力和影响力的领域之一,区块链技术作为金融科技的核心驱动力,正在颠覆传统的金融模式,为全球用户提供更加普惠、便捷、安全的金融服务。在这个变革的浪潮中,PtahDAO(普塔道)作为全…

UMS攸信入选2023年先进制造业倍增计划企业名单,为企业发展增添新助力!

根据《厦门市人民政府关于印发先进制造业倍增计划实施方案(2022-2026年)的通知》(厦府规〔2022〕3号),经市政府专题会研究,确定2023年先进制造业倍增计划企业名单。 关于2023年先进制造业倍增计划企业名单和…

【知网检索】2023年金融,贸易和商业管理国际学术会议(FTBM2023)

随着经济全球化,贸易自由化的进程加快,我国经济对外开放程度不断加深,正在加快融入世界经济一体化当中。当今世界各国竞争过程中,金融、贸易以及商业形态已成为其关键与焦点竞争内容。 2023年金融、贸易和商业管理国际学术会议(F…

百度飞桨助力高校培养AI大模型人才,2023年飞桨产学合作项目申报启动

7月7日,教育部产学合作协同育人项目公布项目指南通过的企业名单,百度被列入2023年(5月)批次名单;其中百度飞桨与文心大模型项目40个,包含教学内容和课程体系改革、实践条件和实践基地建设、师资培训项目三大…

途游游戏 x 极狐GitLab “通关” DevOps :单元测试从无到优,覆盖率 0→80%

目录 4 个工具孤岛 → 极狐GitLab 全家桶, 被动的「人找进度」 → 高效的「进度找人」 把 Code Review 做扎实 代码质量「向左移」,修复成本「往下降」 从无到「优」 自动执行单元测试,覆盖率 0→80% 你喜欢玩游戏吗? 最近…

概念辨析 | SAR运动补偿和自聚焦技术:深入探索雷达图像

注1:本文系“概念辨析”系列之一,致力于简洁清晰地解释、对比复杂而专业的概念。本次辨析的概念是:合成孔径雷达(SAR)的运动补偿和自聚焦技术。 SAR运动补偿和自聚焦技术:深入探索雷达图像 Synthetic Aperture Radar (SAR) 1 背景介绍 合成孔径雷达(Synthetic Aperture R…

打印机地址换了怎么连接

原先的打印机地址:172.16.17.10 添加新打印机地址:winR打开,在运行里输入更改后的地址(\\ip)\\172.16.17.40确定,右键链接。就可以在你要用到的地方看到这个设备了

ESD防静电监控系统在SMT产线中的应用案例

作为电子厂的关键制造环节之一,SMT(表面贴装技术)产线的效率和质量对企业的竞争力至关重要。为了提高生产线的管理效率和保障生产环境的质量,许多电子厂开始采用MES生产管理系统和ESD防静电监控系统的综合解决方案。 在SMT产线中安…

高电压功放的优点有哪些呢(高压放大器)

高电压功放是电子设备中的一种特殊类型的功率放大器,具有独特的优点,被广泛应用于各种领域。高电压功放可以将低电压信号放大到较高的电压水平,实现对大功率负载的驱动。下面我们来看看一下高电压功率放大器的优点。 1.宽电压范围 高电压功放…

8月3日上课内容 LNMP精讲

LNMP:目前成熟的企业网站的应用模式之一,指的是一套协作工作的系统和相关文件 能够提供静态页面服务,也可以提供动态web服务。 这是一个缩写 L linux系统,操作系统。 N nginx网站服务,前端,提供前端的静…

Dockerfile构建Redis镜像(yum方式)

目录 Dockerfile构建Redis镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 Dockerfile构建Redis镜像 1、建立工作目录 [roothuyang1 ~]# mkdir redis [roothuyang1 ~]# cd redis/ 2、编写Dockerfile文件 [roothuyang1 redis]# vim Dockerfile 配置如…