摘要:本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算、图像闭运算和梯度运算

本文分享自华为云社区《[Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算》,作者:eastmount。

数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。

本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算、图像闭运算和梯度运算,基础性知识希望对您有所帮助。

  • 1.图像开运算
  • 2.图像闭运算
  • 3.图像梯度运算

一. 图像开运算

1.基本原理

图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。如下图所示:

开运算(img) = 膨胀( 腐蚀(img) )

下图是hanshanbuleng博主提供的开运算效果图,推荐大家学习他的文章。

https://blog.csdn.net/hanshanbuleng/article/details/80657148

2.函数原型

图像开运算主要使用的函数morphologyEx,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算。其原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

参数dst表示处理的结果,src表示原图像,cv2.MORPH_OPEN表示开运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

运行结果如下图所示:

3.代码实现

完整代码如下所示:

#encoding:utf-8
import cv2
import numpy as np #读取图片
src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED) #设置卷积核
kernel = np.ones((5,5), np.uint8) #图像开运算
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel) #显示图像
cv2.imshow("src", src)
cv2.imshow("result", result) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示,可以看到噪声已经被去除了。

但是结果result中仍然有部分噪声,如果想去除更彻底将卷积设置为10*10的。

kernel = np.ones((10,10), np.uint8)
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

二. 图像闭运算

1.基本原理

图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:

闭运算(img) = 腐蚀( 膨胀(img) )

下图是hanshanbuleng博主提供的开运算效果图,推荐大家学习他的文章。

2.函数原型

图像闭运算主要使用的函数morphologyEx,其原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

参数dst表示处理的结果,src表示原图像, cv2.MORPH_CLOSE表示闭运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

运行结果如下图所示:

3.代码实现

完整代码如下所示:

#encoding:utf-8
import cv2
import numpy as np #读取图片
src = cv2.imread('test03.png', cv2.IMREAD_UNCHANGED) #设置卷积核
kernel = np.ones((10,10), np.uint8) #图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel) #显示图像
cv2.imshow("src", src)
cv2.imshow("result", result) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示,可以看到中间的噪声去掉。

三. 图像梯度运算

1.基本原理

图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。如下图所示:

梯度运算(img) = 膨胀(img) - 腐蚀(img)

2.函数原型

图像梯度运算主要使用的函数morphologyEx,参数为cv2.MORPH_GRADIENT。其原型如下:

dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)

参数dst表示处理的结果,src表示原图像, cv2.MORPH_GRADIENT表示梯度运算,kernel表示卷积核。5*5的卷积核可以采用函数 np.ones((5,5), np.uint8) 构建。

运行结果如下图所示:

3.代码实现

完整代码如下所示:

#encoding:utf-8
import cv2
import numpy as np #读取图片
src = cv2.imread('test04.png', cv2.IMREAD_UNCHANGED) #设置卷积核
kernel = np.ones((10,10), np.uint8) #图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel) #显示图像
cv2.imshow("src", src)
cv2.imshow("result", result) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示,可以看到中间的噪声去掉。

该系列在github所有源代码:https://github.com/eastmountyxz/ImageProcessing-Python

本文摘录自eastmount X华为云开发者社区联合出品的电子书《从零到一 • Python图像处理及识别》。点击免费下载电子书《从零到一 • Python图像处理及识别》

点击关注,第一时间了解华为云新鲜技术~

Python图像处理丨三种实现图像形态学转化运算模式的更多相关文章

  1. Python图像处理丨带你认识图像量化处理及局部马赛克特效

    摘要:本文主要讲述如何进行图像量化处理和采样处理及局部马赛克特效. 本文分享自华为云社区<[Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效>,作者: eastmoun ...

  2. python中的三种输入方式

    python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...

  3. python—字符串拼接三种方法

    python—字符串拼接三种方法   1.使用加号(+)号进行拼接 字符串拼接直接进行相加就可以,比较容易理解,但是一定要记得,变量直接相加,不是变量就要用引号引起来,不然会出错,另外数字是要转换为字 ...

  4. Python图像处理丨图像腐蚀与图像膨胀

    摘要:本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法. 本文分享自华为云社区<[Python图像处理] 八.图像腐蚀与图像膨胀>,作者: eastmount . ...

  5. Python图像处理丨基于OpenCV和像素处理的图像灰度化处理

    摘要:本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理. 本文分享自华为云社区<[Python图像处理 ...

  6. 跟我学Python图像处理丨何为图像的灰度非线性变换

    摘要:本文主要讲解灰度线性变换,基础性知识希望对您有所帮助. 本文分享自华为云社区<[Python图像处理] 十六.图像的灰度非线性变换之对数变换.伽马变换>,作者:eastmount . ...

  7. Python图像处理丨认识图像锐化和边缘提取的4个算子

    摘要:图像锐化和边缘提取技术可以消除图像中的噪声,提取图像信息中用来表征图像的一些变量,为图像识别提供基础. 本文分享自华为云社区<[Python图像处理] 十七.图像锐化与边缘检测之Rober ...

  8. 跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

    摘要:本文讲述图像金字塔知识,了解专门用于图像向上采样和向下采样的pyrUp()和pyrDown()函数. 本文分享自华为云社区<[Python图像处理] 二十一.图像金字塔之图像向下取样和向上 ...

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

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

随机推荐

  1. Linux -4-作业练习

    1.编写脚本实现登陆远程主机.(使用expect和shell脚本两种形式). expect脚本格式  expect总结点击查看 登录直接远程控制主机 #!/usr/bin/expect # # set ...

  2. django-rest-framework 基础四 过滤、排序、分页、异常处理

    django-rest-framework 基础四 过滤.排序.分页.异常处理 目录 django-rest-framework 基础四 过滤.排序.分页.异常处理 1. 过滤 1.1 内置过滤类 1 ...

  3. Thumbnails 图片处理

    Thumbnails 是由谷歌提供的图片处理包,目前版本0.4.8. 可以简洁的实现图片的缩放.压缩.旋转.水印.格式转换等操作. 示例代码: package test;import net.coob ...

  4. 一次 HTTP 请求就需要一次 TCP 连接吗?

    一次 HTTP 请求就需要一次 TCP 连接吗? 本文写于 2021 年 2 月 9 日 太长不看版本:短连接需要,长连接不需要. 一次 HTTP 请求就需要一次 TCP 连接吗? TCP 的连接与断 ...

  5. Yaml中特殊符号"| > |+ |-"的作用

    "|",保留每行尾部的换行符\n. ">",删除每行尾部的换行符\n,则看似多行文本,则在程序中会将其视为一行. include_newlines: | ...

  6. MongoDB 设置用户和密码

    每日一句 Zeal without knowledge is fire without light. 没有知识的热忱犹如火之无光. 给每个数据库设置单独的管理员 我们除了可以设置数据库的超级管理员以外 ...

  7. nginx 部署前端资源的最佳方案

    前言 最近刚来一个运维小伙伴,做线上环境的部署的时候,前端更新资源后,总是需要清缓存才能看到个更新后的结果.客户那边也反馈更新了功能,看不到. 方案 前端小伙伴应该都知道浏览器的缓存策略,协商缓存和强 ...

  8. CabloyJS自带工作流引擎的文档清单

    文档清单 CabloyJS自带工作流引擎文档已经整理出来,欢迎大家围观.拍砖 介绍 介绍 演示:CMS审批工作流 单元测试用例集 流程定义 基本概念 JSON规范 listener规范 listene ...

  9. 一个支持数据绑定与数据联动的Dashboard

    什么是仪表盘 仪表盘是不同部件的组合,可以在一个页面集中显示各类信息,方便用户集中查看信息.并快速处理业务 关于制作部件,请参见:制作部件 CabloyJS仪表盘的特点 更灵活的自适应能力,可以针对m ...

  10. C语言- 基础数据结构和算法 - 动态数组

    听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...