图像处理-形态学运算
文章目录
- 1、膨胀
- 2、腐蚀
- 3、闭运算
- 4、开运算
- 5、具体代码
- 6、实验总结
1、膨胀
首先使用的是opencv提供的getStructuringElement函数获取结构元素,分别设置结构元素为55 与 66 规格对二值化以后的lena图进行膨胀处理,因为是以白色为主进行膨胀,因此黑色部分随着结构元素的规格增大而减少,最终当结构元素大于一定值的时候,整张图片就变成白色的了。
def Dilate(Bin_img):#设置一个5*5的结构元素kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))#iterations为膨胀次数Dilate_img = cv.dilate(Bin_img,kernel,iterations=1)return Dilate_img
2、腐蚀
使用了55与 66规格的结构元素,腐蚀运算则是与膨胀运算是一相反的操作过程,随着结构元素的规格增大,白色像素逐渐变少,最后整张图片就会变成黑色。
def Erode(Bin_img):kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))Erode_img = cv.erode(Bin_img,kernel,iterations=1)return Erode_img
3、闭运算
闭运算是先进行膨胀操作再进行腐蚀操作,能够去掉连通区域内的小型空洞,平滑物体轮廓,连接两个临近的连通域。通过对比右边两张图能够发现,对于同一张图,闭运算闭简单的服饰运算结果相比,闭运算最主要的作用是能够消除图像内部的小黑洞,而闭运算仅仅在结构元素的作用下减少像素。
def Closed(Bin_img):kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))Closed_img = cv.morphologyEx(Bin_img, cv.MORPH_CLOSE, kernel)return Closed_img
4、开运算
开运算是先进行腐蚀再进行膨胀操作,因此图像中一些比较小的连通区域在第一次腐蚀操作的时候就被除去了,在第二次的膨胀运算中,能够将图像中原本存在的简短点连接起来。开运算可以去除图像中的噪声也是因为这个原因。但是开运算会将图像主要区域面积缩小,造成主要区域的形状发生改变。
def Open(Bin_img):kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))Open_img = cv.morphologyEx(Bin_img,cv.MORPH_OPEN,kernel)return Open_img
5、具体代码
import cv2 as cv
import numpy as npdef binaryzation(img):th1 = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY, 11, 2)ret2, th2 = cv.threshold(img, 127, 255, cv.THRESH_BINARY)ret3, th3 = cv.threshold(img,127,255,cv.THRESH_BINARY_INV)ret4, th4 = cv.threshold(img, 127, 255, cv.THRESH_TRUNC)temp1 = cv.hconcat((th1,th2))temp2 = cv.hconcat((th3,th4))temp = cv.vconcat((temp1,temp2))# cv.imshow("result",temp)# cv.waitKey()return th1def Dilate(Bin_img):#设置一个5*5的结构元素kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))#iterations为膨胀次数Dilate_img = cv.dilate(Bin_img,kernel,iterations=1)kernel2 = cv.getStructuringElement(cv.MORPH_RECT, (6,6))Dilate_img2 = cv.dilate(Bin_img,kernel2,iterations=1)result = cv.hconcat((Bin_img,Dilate_img,Dilate_img2))cv.imshow("Dilate",result)cv.waitKey()return Dilate_imgdef Erode(Bin_img):kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))Erode_img = cv.erode(Bin_img,kernel,iterations=1)kernel2 = cv.getStructuringElement(cv.MORPH_RECT, (6, 6))Erode_img2 = cv.erode(Bin_img,kernel2,iterations=1)result = cv.hconcat((Bin_img,Erode_img,Erode_img2))cv.imshow("Erode",result)cv.waitKey()return Erode_imgdef Closed(Bin_img):kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))Closed_img = cv.morphologyEx(Bin_img, cv.MORPH_CLOSE, kernel)result = cv.hconcat(Bin_img,Erode_img,Closed_img)cv.imshow("Closed", result)cv.waitKey()def Open(Bin_img):kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))Open_img = cv.morphologyEx(Bin_img,cv.MORPH_OPEN,kernel)result = cv.hconcat((Bin_img,Dilate_img,Open_img))cv.imshow("Open",result)cv.waitKey()if __name__ == '__main__':src = './Image/lenna.jpg';img0 = cv.imread(src)img = cv.imread(src,0)# 1 二值化Bin_img = binaryzation(img)# 2 膨胀Dilate_img = Dilate(Bin_img)# 3 腐蚀Erode_img = Erode(Bin_img)# 4 闭运算#Closed_img = Closed(Bin_img)# 5 开运算Open_img = Open(Bin_img)
6、实验总结
通过本次实验,及之前的理论课学习到了图像形态学在图像处理中的应用,主要应用于从图像中提取对于表达和描述区域形状有意义的图像分量,以便后续的识别工作能够抓住对象最本质的特性,例如边界,连通域等。本章学习到了膨胀,腐蚀运算,在基于膨胀,腐蚀运算的基础上出现的开运算,闭运算能够解决更加广泛的实际问题。除此之外还有本次实验中而米有涉及到的顶帽运算于黑帽运算,顶帽运算是将原图像与开运算结果之间的差值,用来分离比临近点亮一些的亮斑黑帽运算是原图像与顶帽运算之间的差值。
图像处理-形态学运算相关推荐
- 数字图像处理形态学运算
代码实现的最终效果 clc close all; I=imread('E:\matlab\toolbox\images\imdemos\html\cirlce.bmp'); figure(1);ims ...
- 使用Julia进行图像处理--使用形态学运算进行图像调整
使用Julia进行图像处理--使用形态学运算进行图像调整 前言 图像二值化 基本运算 图像侵蚀 使用侵蚀分离物体 准备用于文本识别的图像 图像膨胀 合并几乎连接的对象 突出显示细节 派生操作 图像开运 ...
- python --opencv图像处理形态学(开运算、闭运算、梯度运算、顶帽运算、黑帽运算)
引言 前面介绍了图像形态学的两种基础算法,图像腐蚀和图像膨胀,本篇接着介绍图像形态学中的开运算.闭运算以及梯度运算. 需要了解清楚图像的腐蚀与膨胀基础原理,不然真的没办法理解开运算和闭运算. 第一件事 ...
- 数字图像处理:第八章 形态学运算
第八章 形态学运算 目录 引言 基本概念 开运算和闭运算 击中击不中变换HMT(Hit-Miss Transform) 边界和骨架(Boundary and Skeleton) 作业 1.引言 形态学 ...
- OpenCV精进之路(三):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
前言 腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域 ...
- Skimage图像处理教程5)形态学运算
上一讲中已经介绍了如何介绍开闭,膨胀腐蚀,白顶帽黑顶帽运算等内容,这一讲主要介绍如何用python的skimage做其他的形态学运算,如去除小区域,提取图像骨架, # 移除小的区域 skimage.m ...
- OpenCV—形态学运算定义与实现
OpenCV-形态学运算定义与实现 1.形态学运算与结构元素 形态学运算是针对二值图像依据数学形态学(Mathematical Morphology)的集合论方法发展起来的图像处理方法.数学形态学起源 ...
- 图像处理-形态学处理
图像处理中的形态学操作用于图像与处理操作(去噪,形状简化)图像增强(骨架提取,细化,凸包及物体标记).物体背景分割及物体形态量化等场景 形态学一般处理的是二值化图片或者灰度图 注释:形态学与滤波的区别 ...
- opencv形态学运算:腐蚀(erode)和膨胀(dilate)
形态学操作就是基于形状的一系列图像处理操作.OpenCV为进行图像的形态学变换提供了快捷.方便的函数.最基本的形态学操作有二种,他们是:膨胀与腐蚀(Dilation与Erosion). 膨胀与腐蚀能实 ...
- matlab数字图像处理----形态学图像处理
目录: 一.基本形态学运算 (1)概念部分 (2)实验代码部分 二.组合形态学运算 (1)图像的边界测定 (2)二值图像的形态学操作 一.基本形态学运算 (1)概念部分 形态学:通常指生物学中对动植物 ...
最新文章
- 交换机和路由器各自的实现原理
- discuz手机版模板开发
- vue和layui哪个更好用_幕布和Mind+思维导图哪个更好用?
- 什么是序列化?python pickle模块
- stm32f103r6最小系统原理图_超强PCB布线设计经验谈附原理图
- Android多种样式的进度条
- window中使用jedis连接虚拟机中的redis
- Java中的AtomicInteger
- Java编程提高性能时需注意的地方
- 学习笔记1-【计算机组成原理】-【计算机科学速成课】[40集全/精校] - Crash Course Computer Science
- 大气数据计算机英语,大气数据计算机(ADC)
- Carryon 数数字(x^n ≡1 mod(x-1))
- 实现简单的滑块验证代码案例
- 万字长文!让你懂透编译原理(二)——第二章 高级语言及其语法描述
- excel 锁定第一行
- MySQL为什么会抖一下
- Linux飞鸽传书源码,Ubuntu 7.10下源码安装飞鸽传书IpMsg
- 系分 - 计算机组成与体系结构
- My97 日期改变事件
- 算法---丢失的数字