欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽

发布时间:2025/3/21 python 87 豆豆
生活随笔 收集整理的这篇文章主要介绍了 opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Morphological Transformations

1图像腐蚀

腐蚀的基本思想:侵蚀前景物体的边界(总是试图保持前景为白色);内核在图像中滑动(如在2D卷积中).只有当内核下的所有像素都是1时,原始图像中的像素(1或0)才会被认为是1,否则它会被侵蚀(变为零).

边界附近的所有像素都将被丢弃,具体取决于内核的大小.因此,前景对象的厚度或大小减小,或者图像中的白色区域减小.
它有助于消除小的白噪声,分离两个连接的对象
原图:

代码

import cv2 import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8) erosion = cv2.erode(img,kernel,iterations = 1)cv2.imshow('src',img) cv2.imshow('show',erosion) cv2.waitKey()

效果图:

2膨胀

它恰好与侵蚀相反。 这里,如果内核下的至少一个像素为“1”,则像素元素为“1”. 因此它增加了图像中的白色区域或前景对象的大小增加.
通常,在去除噪音的情况下,腐蚀之后是膨胀.因为,侵蚀会消除白噪声,但它也会缩小我们的物体,所以我们膨胀它,由于噪音消失了,它们不会再回来,则我们的物体区域会增加。 它也可用于连接对象的破碎部分.

代码

import cv2 import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8) dilation = cv2.dilate(img,kernel,iterations = 1)cv2.imshow('src',img) cv2.imshow('show',dilation) cv2.waitKey()

3开运算

cv2.morphologyEx() :先腐蚀再膨胀,有助于消除噪音.
代码

import cv2 import numpy as np import matplotlib.pylab as pltimg = cv2.imread('img8.png',0)kernel = np.ones((5,5),np.uint8) opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)cv2.imshow('src',img) cv2.imshow('show',opening) cv2.waitKey()

4闭运算

先膨胀后腐蚀,用于消除前景对象内的小孔或对象上的小黑点.
代码

import cv2 import numpy as npimg = cv2.imread('img9.png',0)kernel = np.ones((5,5),np.uint8) closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)cv2.imshow('src',img) cv2.imshow('show',closing) cv2.waitKey()


5形态学梯度

图像的膨胀和腐蚀之间的差异,结果看起来像目标的轮廓
代码

import cv2 import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8) gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)cv2.imshow('src',img) cv2.imshow('show',gradient) cv2.waitKey()

6顶帽(Top Hat)

原图像与开运算图的区别,突出原图像中比周围亮的区域
代码

import cv2 import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8) tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)cv2.imshow('src',img) cv2.imshow('show',tophat) cv2.waitKey()

7黑帽(Black Hat)

闭运算图 - 原图像,突出原图像中比周围暗的区域
代码

import cv2 import numpy as npimg = cv2.imread('img7.png',0)kernel = np.ones((5,5),np.uint8) blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)cv2.imshow('src',img) cv2.imshow('show',blackhat) cv2.waitKey()

结构元素

我们在Numpy的帮助下创建了前面示例中的矩形结构元素. 但在某些情况下,可能需要椭圆/圆形内核。 所以为此,OpenCV有一个函数cv2.getStructuringElement(). 只需传递内核的形状和大小,即可获得所需的内核.
代码

# Rectangular Kernel cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))Out[4]: array([[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1]], dtype=uint8)# Elliptical Kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) Out[5]: array([[0, 0, 1, 0, 0],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[1, 1, 1, 1, 1],[0, 0, 1, 0, 0]], dtype=uint8)# Cross-shaped Kernel cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)) Out[6]: array([[0, 0, 1, 0, 0],[0, 0, 1, 0, 0],[1, 1, 1, 1, 1],[0, 0, 1, 0, 0],[0, 0, 1, 0, 0]], dtype=uint8) 《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。