目录:

(一) 顶帽(原图像与开操作图像的差值)
(二) 黑帽(原图像与闭操作图像的差值)
(三) 形态学梯度
  (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实现其它形态学操作的更多相关文章

  1. 【图像处理】OpenCV+Python图像处理入门教程(七)图像形态学操作

    图像形态学主要从图像内提取分量信息,该分量信息通常对表达图像的特征具有重要意义.例如,在车牌号码识别中,能够使用形态学计算其重要特征信息,在进行识别时,只需对这些特征信息运算即可.图像形态学在目标视觉 ...

  2. EasyPR--开发详解(4)形态学操作、尺寸验证、旋转等操作

    在上一篇深度分析与调优讨论中,我们介绍了高斯模糊,灰度化和Sobel算子.在本文中,会分析剩余的定位步骤. 根据前文的内容,车牌定位的功能还剩下如下的步骤,见下图中未涂灰的部分. 图1 车牌定位步骤 ...

  3. Python开发【第三篇】:Python基本之文件操作

    Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...

  4. 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化

    继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...

  5. opencv6.1-imgproc图像处理模块之平滑与形态学操作

    这个部分是<opencv-tutorials.pdf>的部分,这部分也是几大部分中例子最多的,其实这个教程的例子都很不错,不过有些看得出来还是c接口的例子,说明例子有些年头了,其实在&qu ...

  6. [python]用Python进行SQLite数据库操作

    用Python进行SQLite数据库操作 1.导入Python SQLITE数据库模块 Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~  ]: u ...

  7. python学习笔记:文件操作和集合(转)

    转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...

  8. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  9. MATLAB 常用形态学操作函数

    常用形态学操作函数(转自:http://blog.sina.com.cn/s/blog_4c52e9e20100e5if.html) 1.dilate函数 该函数能够实现二值图像的膨胀操作,有以下形式 ...

随机推荐

  1. SpringCloud升级之路2020.0.x版-26.OpenFeign的组件

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 首先,我们给出官方文档中的组件结构图: 官方文档中的组件,是以实现功能为维度的,我们这里是 ...

  2. DDD领域驱动设计落地实践(十分钟看完,半小时落地)

    一.引子 不知今年吹了什么风,忽然DDD领域驱动设计进入大家视野.该思想源于2003年 Eric Evans编写的"Domain-Driven Design领域驱动设计"简称DDD ...

  3. iOS自定义拍照框拍照&裁剪(一)

    卡片机时代 很重要的一点是,相机本身是没有方向概念的,它不理解拍摄的内容,只会以相机自己的坐标系去保存数据,下图展示了相机对"F"进行四个角度拍摄时返回的图片数据. 最初的卡片机时 ...

  4. Java读取属性配置文件-properties

    在项目开发中,我们难免将一些可变的参数放在程序以外,作为一个单独的文件,即配置文件,这样方便项目在不同的使用环境部署时.或者说需要不同时,可以通过简单配置这些程序以外的文件来修改程序里的变量. 常用的 ...

  5. python 类方法 静态方法

    属性: 公有属性  (属于类,每个类一份) 普通属性  (属于对象,每个对象一份) 私有属性    (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法:(按作用) 构造方法 析构函数 方法: ...

  6. QQ消算轰炸,我好无聊真的

    from pynput.keyboard import Key,Controller import time from random import choice time.sleep(5) # 创建键 ...

  7. UltraSoft - Alpha - Scrum Meeting 6

    Date: Apr 21th, 2020. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM 验证了课程中心获取课程资源和作业的爬虫方式 细化前后端交互中的难 ...

  8. the Agiles Scrum Meeting 7

    会议时间:2020.4.15 21:00 1.每个人的工作 根据项目进度,我们将原先的完善组和debug组合并,成为团队项目增量开发组,原增量组成为个人结对项目增量开发组. 今天已完成的工作 个人结对 ...

  9. C++ string类型小结

    目录 构造函数 string.append() string.assign() string.at() string.back() string.begin() string.capasity() s ...

  10. 计算机网络之应用层概述(C/S模型与p2p模型)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105582318 学习课程:<2019王道考研计算机网络> 学习目的 ...