千家信息网

Python OpenCV形态学运算示例分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天小编给大家分享一下Python OpenCV形态学运算示例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获
千家信息网最后更新 2026年11月02日Python OpenCV形态学运算示例分析

今天小编给大家分享一下Python OpenCV形态学运算示例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. 腐蚀 & 膨胀

1.1什么是腐蚀&膨胀

腐蚀&膨胀是图像形态学中的两种核心操作

腐蚀可以描述为是让图像沿着自己的边界向内收缩

而膨胀则刚好与收缩相反,可以描述为是让图像沿着边界向内扩张。

这两种操作的逻辑和作用都和上篇讲到的使用滤波器做平滑处理有些类似,不同之处在于,腐蚀求的是滤波核内像素的最小值,而膨胀求的是最大值。并将计算出的值复制给锚点位置的像素。

作用上同平滑处理类似,可以消除噪声。

因为腐蚀求的是最小值,膨胀求的是最大值,所以经过腐蚀操作的图像的总体亮度会有所降低,而经过膨胀操作的图像的总体亮度会有所升高。

为方便示例,准备以下图片素材(test1.jpg):

1.2 腐蚀方法 cv2.erode()

python中OpenCV使用cv2.erode()方法实现腐蚀操作。

该方法语法如下:

cv2.erode(src, kernel, anchor=None, iterations=None, borderType=None, borderValue=None)

  • scr 原图像

  • kernel 腐蚀要用到的核

  • anchor 锚点

  • iterations 可选参数,腐蚀操作的迭代次数,默认为1。

  • borderType 边界样式,可选。

  • borderValue 边界值,可选。

其中kernel这个参数,核,需要手动取创建一个数组,而不能是像滤波器那样指定一个大小。

import cv2import numpy as npimg = cv2.imread("test1.jpg")# 创建3*3的数组作为滤波核k = np.ones((3, 3), np.uint8)dst = cv2.erode(img, k)cv2.imshow("dst", dst)cv2.waitKey()cv2.destroyAllWindows()

腐蚀效果如下,如图,我们的鱼骨显得年代更久远了,鱼刺消失、变暗了相当一部分。

1.3 膨胀方法 cv2.dilate()

python中OpenCV使用cv2.dilate()方法实现膨胀操作。

该方法语法如下:

dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

可以看出,其参数用法同cv2.erode()的参数。

import cv2import numpy as npimg = cv2.imread("test1.jpg")# 创建16*16的数组作为核k = np.ones((16, 16), np.uint8)dst = cv2.dilate(img, k)cv2.imshow("dst", dst)cv2.waitKey()cv2.destroyAllWindows()

膨胀效果如下,如图所示,图片众多鱼的亮度明显变高了。

这种图像效果,也被称之为"近视眼"效果。

2. 开运算 & 闭运算

2.1 简述

开运算就是将图像先进性腐蚀操作,再进行膨胀操作。其可以用来抹除图像外部的细节(噪声)。

闭运算则与之相反

闭运算是先对图像进行膨胀操作,在进行腐蚀操作。其可以用来抹除图像的内部细节(噪声)。

腐蚀和膨胀虽然是逆操作,但是开运算和闭运算都不会使图像恢复原状。

2.2 开运算

以 3 为核

代码示例如下

import cv2import numpy as npimg = cv2.imread("test1.jpg")k = np.ones((3, 3), np.uint8)dst = cv2.erode(img, k)dst = cv2.dilate(dst, k)cv2.imshow("dst", dst)cv2.waitKey()  cv2.destroyAllWindows()

2.3 闭运算

以 10 为核

代码示例如下

import cv2import numpy as npimg = cv2.imread("test1.jpg")k = np.ones((10, 10), np.uint8)dst = cv2.dilate(img, k)dst = cv2.erode(dst, k)cv2.imshow("dst", dst)cv2.waitKey()cv2.destroyAllWindows()

3. morphologyEx()方法

3.1 morphologyEx()方法 介绍

在python中OpenCV还提供了morphologyEx()方法(形态学方法),可以用来完成所有常用的形态学运算。

morphologyEx()语法如下:

morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

其中

  • scr 表示图像

  • op 表示操作类型

  • kernel 表示 核

  • anchor 表示锚点

  • iterations 为迭代次数,默认为1

  • borderType 是边界样式,默认1

  • borderValue 是边界值,默认1

可以供op选择的操作类型有:

参数值描述
cv2.MORPH_ERODE腐蚀
cv2.MORPH_DILATE膨胀
cv2.MORPH_ OPEN开运算,先腐蚀后膨胀
cv2.MORPH_CLOSE闭运算,先膨胀后腐蚀
cv2.MORPH_GRADIENT梯度运算,膨胀图减腐蚀图
cv2.MORPH_TOPHAT顶帽运算,原始图减开运算图
cv2.MORPH_BLACKHAT黑帽运算,闭运算图,减开运算图

接下来我们使用图片"test2.jpg"(下图)来继续下边的示例:

3.2 梯度运算

对"test2.jpg"以 4 为核做梯度运算:

import cv2import numpy as npimg = cv2.imread("test2.jpg")  k = np.ones((4, 4), np.uint8)  dst = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, k) cv2.imshow("dst", dst)  cv2.waitKey()  cv2.destroyAllWindows()

梯度运算,即膨胀图减去腐蚀图,因为膨胀运算得到的图像中我物体比原图中的"大",而腐蚀运算得到的图像中的物体是收缩过的,比原图中的"小",所以膨胀的结果减去腐蚀的结果,会得到一个大概的、不精准的轮廓。

test2.jpg梯度运算执行效果如下:

3.3 顶帽运算

对"test2.jpg"以 4 为核做顶帽运算:

import cv2import numpy as npimg = cv2.imread("test2.jpg")k = np.ones((4, 4), np.uint8)cv2.imshow("img", img)dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, k)cv2.imshow("dst", dst)cv2.waitKey()cv2.destroyAllWindows()

顶帽运算,即原图减去开运算图,因为开运算抹除了图像的外部细节,所以顶帽运算即"有外部细节的图像 减去 无外部细节的图像",得到的结果也就只剩外部细节了。

顶帽运算处理效果如下:

3.4 黑帽运算

对"test2.jpg"以 4 为核做顶帽运算:

import cv2import numpy as npimg = cv2.imread("test2.jpg")k = np.ones((4, 4), np.uint8)dst = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, k)cv2.imshow("dst", dst)cv2.waitKey()cv2.destroyAllWindows()

黑帽运算,即原图像的闭运算减去原图像

因为闭运算可以抹除图像的内部细节,所以黑帽运算即 "无内部细节的图像减去有内部细节的图像",结果只剩下内部细节。

黑帽运算处理效果如下:

以上就是"Python OpenCV形态学运算示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

运算 图像 方法 细节 效果 顶帽 示例 原图 边界 形态 形态学 参数 梯度 知识 篇文章 结果 处理 亮度 噪声 图片 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 山东特亿宝互联网科技有限公司 科技互联网公司装修 关于新基建和互联网科技 融势互联网科技 互联网科技素材视频竖屏 深圳互联网科技怎么样 欧洲十大科技互联网公司 上海宁丞科技互联网 宝灵互联网科技有限公司 银川新华互联网科技学校联系电话 南博望互联网科技有限公司 济南有互联网科技公司吗 保险科技服务互联网营销体系 广州千川互联网科技有限公司 陕西九四连强互联网科技有限公司 保山互联网科技靠谱吗 河南商务圈互联网科技有限公司 互联网科技快速发展优美句子 株洲百竞科技的互联网营销顾问 耶加雪菲 河南云网互联网络科技有限公司 中国互联网科技股 互联网 科技创业 互联网女皇 腾讯科技 互联网实体化科技化 互联网科技的全部知识 科技互联网行业投资研究 恒生互联网科技趋势 互联网科技自媒体灵感
0