python实现其它形态学操作
目录:
(一) 顶帽(原图像与开操作图像的差值)
(二) 黑帽(原图像与闭操作图像的差值)
(三) 形态学梯度
(1)基本梯度(膨胀后的图像与腐蚀后的图像差值)
(2)内部梯度(原图像减去腐蚀后的图像差值)
(3)外部梯度(膨胀后图像与原图差值)
(一) 顶帽(原图像与开操作图像的差值)

1 import cv2 as cv
2 import numpy as np
3
4 def top_hat_demo(image):
5 gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
6 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
7 cv.imshow("binary",binary) #这里的二值化图像就可以看作是原图像(注意:基于腐蚀膨胀是可以直接对彩色图像操作的))
8 kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))
9 dst = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel) #查看开操作图像
10 cv.imshow("open_demo",dst)
11 dst = cv.morphologyEx(binary,cv.MORPH_TOPHAT,kernel) #查看顶帽图像
12 cv.imshow("top_hat_demo",dst)
13
14
15 src = cv.imread("./cir.png") #读取图片
16 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
17 cv.imshow("input image",src) #通过名字将图像和窗口联系
18
19 top_hat_demo(src)
20
21 cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
22 cv.destroyAllWindows() #销毁所有窗口

(二) 黑帽(原图像与闭操作图像的差值,提取点)
1 def black_hat_demo(image):
2 gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
3 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
4 cv.imshow("binary",binary)
5 kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15))
6 dst = cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)
7 cv.imshow("close_demo",dst)
8 dst = cv.morphologyEx(binary,cv.MORPH_BLACKHAT,kernel)
9 cv.imshow("black_hat_demo",dst)

(三) 形态学梯度
(1)基本梯度(膨胀后的图像与腐蚀后的图像差值)
1 def graditent_demo(image):
2 gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
3 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
4 cv.imshow("binary",binary)
5 kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15))
6 dst = cv.dilate(binary, kernel)
7 cv.imshow("dilate_demo", dst)
8 dst = cv.erode(binary, kernel)
9 cv.imshow("erode_demo", dst)
10 dst = cv.morphologyEx(binary,cv.MORPH_GRADIENT,kernel)
11 cv.imshow("graditent_demo",dst)

(2)内部梯度(原图像减去腐蚀后的图像差值)
(3)外部梯度(膨胀后图像与原图差值)
1 def gradient2_demo(image):
2 kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
3 dm = cv.dilate(image, kernel)
4 em = cv.erode(image, kernel)
5 dst1 = cv.subtract(image, em) # internal gradient
6 dst2 = cv.subtract(dm, image) # external gradient
7 cv.imshow("internal", dst1)
8 cv.imshow("external", dst2)
9
10
11 print("--------- Python OpenCV Tutorial ---------")
12 src = cv.imread("D:/vcprojects/images/test.png")
13 cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
14 cv.imshow("input image", src)
15 gradient2_demo(src)
16 cv.waitKey(0)
17 cv.destroyAllWindows()

参考:
https://www.cnblogs.com/ssyfj/p/9277891.html
python实现其它形态学操作的更多相关文章
- 【图像处理】OpenCV+Python图像处理入门教程(七)图像形态学操作
图像形态学主要从图像内提取分量信息,该分量信息通常对表达图像的特征具有重要意义.例如,在车牌号码识别中,能够使用形态学计算其重要特征信息,在进行识别时,只需对这些特征信息运算即可.图像形态学在目标视觉 ...
- EasyPR--开发详解(4)形态学操作、尺寸验证、旋转等操作
在上一篇深度分析与调优讨论中,我们介绍了高斯模糊,灰度化和Sobel算子.在本文中,会分析剩余的定位步骤. 根据前文的内容,车牌定位的功能还剩下如下的步骤,见下图中未涂灰的部分. 图1 车牌定位步骤 ...
- Python开发【第三篇】:Python基本之文件操作
Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和 file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...
- 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化
继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...
- opencv6.1-imgproc图像处理模块之平滑与形态学操作
这个部分是<opencv-tutorials.pdf>的部分,这部分也是几大部分中例子最多的,其实这个教程的例子都很不错,不过有些看得出来还是c接口的例子,说明例子有些年头了,其实在&qu ...
- [python]用Python进行SQLite数据库操作
用Python进行SQLite数据库操作 1.导入Python SQLITE数据库模块 Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~ ]: u ...
- python学习笔记:文件操作和集合(转)
转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...
- python os&shutil 文件操作
python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...
- MATLAB 常用形态学操作函数
常用形态学操作函数(转自:http://blog.sina.com.cn/s/blog_4c52e9e20100e5if.html) 1.dilate函数 该函数能够实现二值图像的膨胀操作,有以下形式 ...
随机推荐
- Google Chrome打开权限设置开关(摄像头,录音等)
在搜索框输入以下字符 chrome://flags/#unsafely-treat-insecure-origin-as-secure
- Java面向对象/面向过程
面向过程 第一步做啥 第二部做啥 依此类推 层层递进 比如要弄一辆自行车 面向过程 搞车轮子 车链子 一步步来 如果有个地方坏了 说不定整个车都要拆了重新弄 扩展性很差 维护性也很差 速度比较快 面向 ...
- Apache ShardingSphere 在京东白条场景的落地之旅
京东白条使用 Apache ShardingSphere 解决了千亿数据存储和扩容的问题,为大促活动奠定了基础. 2014 年初,"京东白条"作为业内互联网信用支付产品,数据量爆发 ...
- 『基于ArcGIS的Python编程秘籍(第2版)』书本源码
ArcPy学习 第1章 面向ArcGIS的Python编程语言的基础 略 第2章 管理地图文档和图层 引用当前的地图文档 引用磁盘上的地图文档 获取地图文档的图层列表 限制图层列表 缩放至所选要素 改 ...
- Java(20)参数传递之类名、抽象类、接口
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201632.html 博客主页:https://www.cnblogs.com/testero ...
- paramiko远程控制host执行脚本的用法
import paramiko ssh = paramiko.SSHClient() print ssh.get_host_keys() ssh.set_missing_host_key_policy ...
- Go语言核心36讲(Go语言进阶技术六)--学习笔记
12 | 使用函数的正确姿势 在前几期文章中,我们分了几次,把 Go 语言自身提供的,所有集合类的数据类型都讲了一遍,额外还讲了标准库的container包中的几个类型. 在几乎所有主流的编程语言中, ...
- 让全链路压测变得更简单!Takin2.0重磅来袭!
自Takin社区版1.0发布两个多月以来,有很多测试同学陆续在各自的工作中运用了起来,其中包括金融.电商.物流.出行服务等行业.这个过程中我们收到了很多同学的反馈建议,同时也了解到很多同学在落地全链路 ...
- ScatterLayout:分散布局在py中的引用
""" ScatterLayout:分散布局 """ from kivy.app import App from kivy.uix.scat ...
- OO第三单元JML总结
目录 目录一.JML语言的理论基础二.应用工具链三.部署SMT Solver四.部署JMLUnitNG/JMLUnit五.三次作业分析第一次作业第二次作业第三次作业六.总结与心得体会 一.JML语言的 ...