摘要:图像腐蚀腐蚀的基本思想侵蚀前景物体的边界总是试图保持前景为白色内核在图像中滑动如在卷积中只有当内核下的所有像素都是时,原始图像中的像素或才会被认为是,否则它会被侵蚀变为零边界附近的所有像素都将被丢弃,具体取决于内核的大小因此,前景对象的厚度
Morphological Transformations
1图像腐蚀腐蚀的基本思想:侵蚀前景物体的边界(总是试图保持前景为白色);内核在图像中滑动(如在2D卷积中).只有当内核下的所有像素都是1时,原始图像中的像素(1或0)才会被认为是1,否则它会被侵蚀(变为零).
边界附近的所有像素都将被丢弃,具体取决于内核的大小.因此,前景对象的厚度或大小减小,或者图像中的白色区域减小.
它有助于消除小的白噪声,分离两个连接的对象
原图:
代码:
import cv2 import numpy as np img = 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()
效果图:
它恰好与侵蚀相反。 这里,如果内核下的至少一个像素为“1”,则像素元素为“1”. 因此它增加了图像中的白色区域或前景对象的大小增加.
通常,在去除噪音的情况下,腐蚀之后是膨胀.因为,侵蚀会消除白噪声,但它也会缩小我们的物体,所以我们膨胀它,由于噪音消失了,它们不会再回来,则我们的物体区域会增加。 它也可用于连接对象的破碎部分.
代码:
import cv2 import numpy as np img = 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 plt img = 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 np img = 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()
图像的膨胀和腐蚀之间的差异,结果看起来像目标的轮廓
代码:
import cv2 import numpy as np img = 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 np img = 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 np img = 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)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/42010.html
❤️欢迎订阅《从实战学python》专栏,用python实现爬虫、办公自动化、数据可视化、人工智能等各个方向的实战案例,有趣又有用!❤️ 更多精品专栏简介点这里 治愈生活的良方 就是保持对生活的热爱 前言 哈喽,大家好,我是一条。 每次和女朋友出去玩,拍照是必须的,天气好还行,天气要是不好,加上我这破手机,那拍的简直惨不忍睹,自己都不过去。 但是没什么能难倒程序员的,为了不挨骂,连夜写出去雾...
摘要:数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。所以这个结果也会把形状以外的噪点排除掉。你还可以查看其它笔记。参考资料图像的膨胀与腐蚀数学形态学基本操作及其应用计算机视觉特征提取与图像处理第三版 数学形态学(mathematical morphology)关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。起初是基于二值图像提出的,后来扩展到灰度图像。...
小编写这篇文章的主要目的,主要是给大家介绍关于python数字图像处理的一些相关介绍,包括基本的形态学滤波,比如可以使用数字图像去进行处理类似的形态学滤波。那么,具体的内容呢?下面就给大家详细解答下。 引言 对图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。 1、膨胀(dilation) 原理:一般对二值图像进行操作。找到像素值为1的点,将它...
阅读 2660·2023-04-26 02:44
阅读 8327·2021-11-22 14:44
阅读 2122·2021-09-27 13:36
阅读 2468·2021-09-08 10:43
阅读 678·2019-08-30 15:56
阅读 1393·2019-08-30 15:55
阅读 2889·2019-08-28 18:12
阅读 2829·2019-08-26 13:50