OpenCv-Python学习笔记(九):形态学转换

这篇具有很好参考价值的文章主要介绍了OpenCv-Python学习笔记(九):形态学转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

腐蚀

膨胀

开运算

闭运算

形态学梯度

礼帽

黑帽

形态学操作的关系

构建椭圆/圆形的核


形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像进 行的操作。需要输入两个参数,一个是原始图像,第二个被称为结构化元素或 核,它是用来决定操作的性质的。两个基本的形态学操作是腐蚀和膨胀。他们 的变体构成了开运算,闭运算,梯度等。

腐蚀

就像土壤侵蚀一样,这个操作会把前景物体的边界腐蚀掉。这是怎么做到的呢?卷积核沿着图像滑动,如果与卷积核对应的图像的所有像素值都是1,那么该区域的所有像素值就是1,否则为0。用于去除白噪声和断开两个连在一起的物体等。用到的函数是cv2.erode()

第一个参数表示输入图像。

第二个参数表示定义的卷积核。

第三个参数表示迭代腐蚀的次数,通俗的说就是腐蚀多少次。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('../data/image/13.png',0)
"""腐蚀"""
#创建一个5*5的值为1的卷积核
kernel = np.ones((5,5),np.uint8)
#腐蚀运算,iteration=1,迭代腐蚀1次
erosion = cv2.erode(img,kernel,iterations=1)
#显示原图
plt.subplot(1,2,1),plt.imshow(img,cmap = "gray")
plt.title("Original")
#显示腐蚀后的图
plt.subplot(1,2,2),plt.imshow(erosion,cmap ="gray")
plt.title("corrosion")
plt.show()

 文章来源地址https://www.toymoban.com/news/detail-447904.html

OpenCv-Python学习笔记(九):形态学转换

这里注意一个题外话,在使用plt.imshow()函数显示二值图像时,需要设置cmap = "gary",否则显示是不正常的彩色图像,如:

OpenCv-Python学习笔记(九):形态学转换

膨胀

膨胀与腐蚀相反,与卷积核对应的原图像的像素值中只要有一个是1,那么该区域的所有像素点的值都为1。所以膨胀会增加图像的白色区域。一般在去噪声时,先用腐蚀在膨胀,因为腐蚀在去掉白噪声的同时,也会使前景对象变小,所以使用膨胀放大前景。用到的函数是cv2.dilate()

第一个参数表示原图像。

第二个参数表示定义的卷积核。

第三个参数表示迭代膨胀的次数。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('../data/image/13.png',0)

#创建一个5*5的值为1的卷积核
kernel = np.ones((5,5),np.uint8)
#iteration=1,迭代膨胀1次
dilation = cv2.dilate(img,kernel,iterations = 1)
#显示原图
plt.subplot(1,2,1),plt.imshow(img,cmap = "gray")
plt.title("Original")
#显示处理后的图
plt.subplot(1,2,2),plt.imshow(dilation,cmap ="gray")
plt.title("dilation")
plt.show()

 

OpenCv-Python学习笔记(九):形态学转换

开运算

先进行腐蚀运算再进行膨胀运算就叫做开运算,被用来去除噪声。可以先调用腐蚀函数,在调用膨胀函数,也可以直接使用cv2.morphologyEx()函数实现。

第一个参数表示输入图像。

第二个参数表示形态学操作的类型。

  • cv2.MORPH_OPEN:开运算
  • cv2.MOPRH_CLOSE:闭运算
  • cv2.MPRPH_GRADIENT:形态学梯度
  • cv2.MORPH_TOPHAT:礼帽
  • cv2.MORPH_BLACKHAT:黑帽

第三个参数表示定义的卷积核。

 

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('../data/image/14.png')
img1= cv2.imread('../data/image/15.png')
img2= cv2.imread('../data/image/13.png')
#创建一个7*7的值为1的卷积核
kernel = np.ones((7,7),np.uint8)
"""开运算"""
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
"""闭运算"""
closing = cv2.morphologyEx(img1, cv2.MORPH_CLOSE, kernel)
"""形态学梯度"""
gradient = cv2.morphologyEx(img2, cv2.MORPH_GRADIENT, kernel)
#显示原图
plt.subplot(3,2,1),plt.imshow(img,cmap = "gray")
plt.title("Original")
#显示处理后的图
plt.subplot(3,2,2),plt.imshow(opening,cmap ="gray")
plt.title("opening")

plt.subplot(3,2,3),plt.imshow(img1,cmap = "gray")
plt.title("Original")
#显示处理后的图
plt.subplot(3,2,4),plt.imshow(closing,cmap ="gray")
plt.title("closing")

plt.subplot(3,2,5),plt.imshow(img2,cmap = "gray")
plt.title("Original")
#显示处理后的图
plt.subplot(3,2,6),plt.imshow(gradient,cmap ="gray")
plt.title("gradient")
plt.show()

OpenCv-Python学习笔记(九):形态学转换

闭运算

先进行膨胀运算再进行腐蚀运算就叫做闭运算,被用来填充前景物体中的小洞,或者前景物体上的小黑点。程序和函数参数见开运算。

形态学梯度

结果像是前景物体的轮廓,像是膨胀的结果减去腐蚀的结果。程序和函数参数见开运算。

礼帽

原始图像与进行开运算之后的图像的差。函数参数见开运算。下面的例子对比了使用使用函数计算的结果和不使用函数计算的结果是否相同。

img = cv2.imread('../data/image/13.png')
#创建一个11*11的值为1的卷积核
kernel = np.ones((11,11),np.uint8)
#开运算
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
#原图像减去开运算后的图
tophat1 = img - opening
#礼帽
tophat2 = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

plt.subplot(1,4,1),plt.imshow(img,cmap = "gray")
plt.title("Original")
plt.subplot(1,4,2),plt.imshow(opening ,cmap = "gray")
plt.title("Opening")
plt.subplot(1,4,3),plt.imshow(tophat1,cmap = "gray")
plt.title("tophat1")
plt.subplot(1,4,4),plt.imshow(tophat2,cmap = "gray")
plt.title("tophat2")
plt.show()

 

OpenCv-Python学习笔记(九):形态学转换

 

黑帽

进行闭运算之后的图像与原始图像的差。

img = cv2.imread('../data/image/13.png')
#创建一个11*11的值为1的卷积核
kernel = np.ones((11,11),np.uint8)
#闭运算
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
#闭运算减去原图像
blackhat1 =closing - img
#礼帽
blackhat2 = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

plt.subplot(1,4,1),plt.imshow(img,cmap = "gray")
plt.title("Original")
plt.subplot(1,4,2),plt.imshow(closing,cmap = "gray")
plt.title("closing")
plt.subplot(1,4,3),plt.imshow(blackhat1,cmap = "gray")
plt.title("blackhat1")
plt.subplot(1,4,4),plt.imshow(blackhat2,cmap = "gray")
plt.title("blackhat2")
plt.show()

 

OpenCv-Python学习笔记(九):形态学转换

形态学操作的关系

开运算 = 先腐蚀,后膨胀

闭运算 = 先膨胀,后腐蚀

形态学梯度 = 膨胀 - 腐蚀

礼帽 = 原图 - 开运算

黑帽 = 闭运算 - 原图

OpenCv-Python学习笔记(九):形态学转换

构建椭圆/圆形的核

使用cv2.getStructuringElement()函数。

第一个参数表示核的形状。

  • cv2.MOPRH_RECT:矩形核
  • cv2.MORPH_ELLIPSE:椭圆核
  • cv2.MORPH_CROSS:十字交叉核

第二个参数表示核的大小

OpenCv-Python学习笔记(九):形态学转换

 

到了这里,关于OpenCv-Python学习笔记(九):形态学转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python-OpenCV中的图像处理-形态学转换

    形态学操作:腐蚀,膨胀,开运算,闭运算,形态学梯度,礼帽,黑帽等 主要涉及函数:cv2.erode(), cv2.dilate(), cv2.morphologyEx() 原理:形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像进行的操作。需要输入两个参数,一个是原始图像,第二个被称为结构化

    2024年02月13日
    浏览(42)
  • python-opencv之形态学操作(腐蚀和膨胀)原理详解

    Removing noise. Isolation of individual elements and joining disparate elements in an image. Finding of intensity bumps or holes in an image. 最基本的形态操作是侵蚀和扩张。让我们更详细地了解这些操作。 原理 它会侵蚀前景物体的边界,并从图像中移除小规模的细节,但同时会减少感兴趣区域的大小。

    2024年02月05日
    浏览(30)
  • OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算

    OpenCV形态学是一种基于OpenCV库的数字图像处理技术,主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。 通过对图像进行形态学操作可以实现一些重要的图像处理任务,比如去除噪

    2024年02月09日
    浏览(32)
  • OpenCV 形态学

    形态学处理之前需要将图像进行二值化处理, 然后我们需要设定一个卷积核, 最后将像素上每个点都完成卷积计算. 形态学很多高级处理的基础, 有很多作用: 消除毛刺、填充空隙、检测边缘,检查拐角(使用十字形卷积核) 腐蚀作用和膨胀相反, 用来腐蚀减小白色区域, 常用来消

    2024年02月22日
    浏览(27)
  • OpenCV 09(形态学)

    形态学指一系列处理图像 形状特征 的图像处理技术. 形态学的基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输入图像中相应的形状或特征,以便进一步进行图像分析和目标识别。 这些处理方法基本是对 二进制图像 进行处理, 即黑白图像 卷积核决定着图

    2024年02月07日
    浏览(51)
  • OpenCv之图像形态学

    目录 一、形态学  二、图像全局二值化  三、自适应阈值二值化 四、腐蚀操作 五、获取形态学卷积核 六、膨胀操作 七、开运算 八、闭运算 定义: 指一系列处理图像形状特征的图像处理技术 形态学的基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输入图

    2024年02月16日
    浏览(27)
  • OpenCV之形态学操作

    形态学操作包含以下操作: 腐蚀 (Erosion) 膨胀 (Dilation) 开运算 (Opening) 闭运算 (Closing) 形态梯度 (Morphological Gradient) 顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作,其他操作由这两个操作变换而来。         用一个结构元素扫描图像中每一个像素,结构元素

    2024年02月09日
    浏览(31)
  • OpenCV17-图像形态学操作

    图像腐蚀(Image erosion)可用于减小图像中物体的大小、填充孔洞或者分离邻近的物体。腐蚀操作通过对图像中的每个像素应用结构元素(也称为腐蚀内核)来实现。 腐蚀操作的原理是将结构元素与图像进行逐像素的比较。如果结构元素的所有像素与图像中对应位置的像素都

    2024年02月08日
    浏览(36)
  • 10 OpenCV 形态学的应用

    adaptiveThreshold 二值化算子 想法:把获取二值化的图片轮廓,对直线进行开闭运算

    2024年03月13日
    浏览(33)
  • opencv获取形态学卷积核

    获取形态学卷积核,这个函数是用来创建自定义形状的卷积核(也称为结构元素),这些核可以用在形态学操作比如腐蚀和膨胀中。 cv2.getStructuringElement(shape, ksize[, anchor]) shape:卷积核形状, cv2.MORPH_RECT: 矩形结构元素 cv2.MORPH_CROSS: 交叉形结构元素 cv2.MORPH_ELLIPSE: 椭圆形结构元素

    2024年04月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包