前文传送门:

「Python 图像处理 OpenCV (1):入门」

「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」

「Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理」

「Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间」

「Python 图像处理 OpenCV (5):图像的几何变换」

「Python 图像处理 OpenCV (6):图像的阈值处理」

「Python 图像处理 OpenCV (7):图像平滑(滤波)处理」

「Python 图像处理 OpenCV (8):图像腐蚀与图像膨胀」

「Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算」

引言

今天是图形处理形态学的最后一篇,我们介绍顶帽运算和黑帽运算。

建议先阅读前面两篇图像处理的内容:

「Python 图像处理 OpenCV (8):图像腐蚀与图像膨胀」

「Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算」

形态学之顶帽运算

图像处理顶帽运算是一个获取图像噪声的运算,它是由原始图像减去图像开运算而得到的结果:

顶帽运算 = 原始图像 - 开运算

图像顶帽运算同样是使用形态学扩展函数 morphologyEx() ,它的参数是 MORPH_TOPHAT ,示例如下:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt # 读取图片
source = cv.imread("demo_noise_white.jpg", cv.IMREAD_GRAYSCALE) # 设置卷积核
kernel = np.ones((5, 5), np.uint8) # 开运算
open = cv.morphologyEx(source, cv.MORPH_OPEN, kernel) # 顶帽运算
dst = cv.morphologyEx(source, cv.MORPH_TOPHAT, kernel) # 显示结果
titles = ['Source Img','Open Img', 'Tophat Img']
images = [source, open, dst] # matplotlib 绘图
for i in range(3):
plt.subplot(1, 3, i+1), plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([]) plt.show()

形态学之黑帽运算

图像处理顶帽运算是一个获取图像内部的小孔,或者前景色中的小黑点的运算。

它是由图像闭运算减去原始图像的操作:

黑帽运算 = 闭运算图像 - 原始图像

图像顶帽运算同样是使用形态学扩展函数 morphologyEx() ,它的参数是 MORPH_BLACKHAT ,示例如下:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt # 读取图片
source = cv.imread("demo_noise_black.jpg", cv.IMREAD_GRAYSCALE) # 设置卷积核
kernel = np.ones((5, 5), np.uint8) # 黑帽运算
dst = cv.morphologyEx(source, cv.MORPH_BLACKHAT, kernel) # 构造显示结果数组
titles = ['Source Img', 'Black Img']
images = [source, dst] # matplotlib 绘图
for i in range(2):
plt.subplot(1, 2, i+1), plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([]) plt.show()

今天的内容比较短,至此,图像形态学的几个基础的运算已经全部介绍完毕,希望各位同学能理解这几个运算的原理,而不是仅仅知道了几个参数或者说几个方法的调用。

示例代码

如果有需要获取源码的同学可以在公众号回复「OpenCV」进行获取。

Python 图像处理 OpenCV (10):图像处理形态学之顶帽运算与黑帽运算的更多相关文章

  1. 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

    摘要:本篇文章结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现. 本文分享自华为云社区<[Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽 ...

  2. Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  3. Python 图像处理 OpenCV (13): Scharr 算子和 LOG 算子边缘检测技术

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  4. Python 图像处理 OpenCV (14):图像金字塔

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  5. Python 图像处理 OpenCV (15):图像轮廓

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  6. Python 图像处理 OpenCV (16):图像直方图

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  7. 【OpenCV新手教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...

  8. opencv 4 图像处理(2 形态学滤波:腐蚀与膨胀,开运算、闭运算、形态学梯度、顶帽、黑帽)

    腐蚀与膨胀 膨胀(求局部最大值)(dilate函数) #include <opencv2/core/core.hpp> #include <opencv2/highgui/highg ...

  9. opencv-图像形态学之开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    转自:https://blog.csdn.net/poem_qianmo/article/details/24599073 1.1 开运算(Opening Operation) 开运算(Opening ...

随机推荐

  1. Windows系统下curl的下载和配置

    curl的下载和配置 简介:用URL规则在命令行下工作的文件传输工具. 下载:下载地址为 https://curl.haxx.se/download.html,在最底部找到Windows的版本,我下载 ...

  2. CF551B

    题目链接:http://codeforces.com/contest/551/problem/B 题目大意:给出字符串a, b, c.试图合理的安排a的字母顺序,使其中有尽可能多的与 c 或 b 相同 ...

  3. Siemens PLC分类和基本性能指标

    PLC分类 整体式plc也成为单元式,特点是电源,中央处理器单元以及I/O借口都集成在一个机壳内. 标准摸板试结构化,也成为组合式,特点是电源,中央处理器单元模板以及I/O模板在结构上都是相互独立的, ...

  4. Java——native关键字

    说明:在使用HashSet的过程中,查看Object.java过程中发现hashCode()方法是以native关键字修饰,没看到过该关键字,这里记录下来. native关键字用来修饰方法,是使用一些 ...

  5. Life In Changsha College- SQA计划与验收测试规程

    本次任务 以前面小组完成的SCRUM设计任务作为背景,拟制软件开发任务的虚拟SQA计划. 编制前面小组完成的SCRUM设计任务的验收测试规程. SQA计划 验收测试规程 测试分析:工程完成的功能包括登 ...

  6. React面试题(超详细,附答案)

    生命周期 组件将要挂载时触发的函数:componentWillMount 组件挂载完成时触发的函数:componentDidMount 是否要更新数据时触发的函数:shouldComponentUpd ...

  7. ASP.NET Core Blazor Webassembly 之 数据绑定

    上一次我们学习了Blazor组件相关的知识(Asp.net Core Blazor Webassembly - 组件).这次继续学习Blazor的数据绑定相关的知识.当代前端框架都离不开数据绑定技术. ...

  8. Golang基础教程——map使用篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第7篇文章,我们来聊聊golang当中map的用法. map这个数据结构我们经常使用,存储的是key-value的键 ...

  9. Rocket - util - MaskGen

    https://mp.weixin.qq.com/s/_aJqf1cFJDK5RVRBhxTWOw   介绍MaskGen的实现.   ​​   1. 基本介绍   给定总线宽度beatBytes,根 ...

  10. ASP.NET中LINQ的基本用法

    此Demo只是一个极其简单的LINQ查询Demo 一个类 using System; using System.Collections.Generic; using System.Linq; usin ...