首页 >> 大全

opencv从入门到精通 哦吼08

2023-11-24 大全 28 作者:考证青年

目录

腐蚀膨胀

腐蚀

膨胀

运算

形态学运算

梯度运算

顶帽运算

黑帽运算

小结

腐蚀与膨胀

腐蚀和膨胀是图像形态学中的两种核心操作,通过这两种操作可以清除或强化图像中的细节。合理使用腐蚀和膨胀,还可以实现图像开运算、闭运算、梯度运算、顶帽运算和黑帽运算等极具特点的操作。下面将对腐蚀、膨胀以及其他形态学操作进行详细的介绍。

腐蚀

腐蚀操作可以让图像沿着自己的边界向内收缩。 通过「核」来实现收缩计算。「核」的英文名为 ,在形态学中可以理解为「由n个像素组成的像素块」,像素块包含一个核心(核心通常在中央位置,也可以定义在其他位置)。像素块在图像的边缘移动,在移动过程中,核会将图像边缘那些与核重合但又没有越过核心的像素点都抹除,效果类似图 12.1 所示的过程,就像削土豆皮一样,将图像一层一层地「削薄」。

将腐蚀操作封装成 erode()方法,该方法的语法如下

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

图像经过腐蚀操作之后,可以抹除一些外部的细节,如图是一个仙人掌,经过腐蚀操作之后 可以将外部的刺去除

import cv2
import numpy as  npimage=cv2.imread('match/img_1.png')
k=np.ones((5,5),np.uint8)
cv2.imshow('image',image)
dst=cv2.erode(image,k)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

膨胀

膨胀操作与腐蚀操作相反,膨胀操作可以让图像沿着自己的边界向内扩张。同样是通过核来计算,当核在图像的边缘移动时,核会将图像边缘填补新的像素,效果类似图 12.6 所示的过程,就像在一面墙上反反复复地涂水泥,让墙变得越来越厚。

将膨胀操作封装成 ()方法,该方法的语法如下:

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

图像经过膨胀操作之后,可以放大一些外部的细节,消除内部细节

import cv2
import numpy as np
image=cv2.imread('match/img_2.png')
k=np.ones((3,3),np.uint8)
cv2.imshow('image',image)
dst=cv2.dilate(image,k)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

开运算

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

# 开运算
'''
开运算是将图像先进性腐蚀操作,再进行膨胀操作,
可以用来抹除图像外部的细节
'''
import  cv2
import numpy as np
img=cv2.imread('match/img_4.png')
k=np.ones((5,5),np.uint8)
cv2.imshow('img',img)
dst=cv2.erode(img,k)
dst1=cv2.dilate(dst,k)
cv2.imshow('dst1',dst1)
cv2.waitKey(0)
cv2.destroyAllWindows()#但是 运算完之后 图片就变得比较模糊了#闭运算 则是反过来  抹去图像内部细节

闭运算就是反过来 去除图象的内部细节

形态学运算

腐蚀和膨胀是形态学的基础操作,除了开运算和闭运算以外,形态学中还有几种比较有特点的运算。 提供了一个 ()形态学方法,包含所有常用的运算,其语法如下:

dst = cv2.(src, op, , , , ,

_vb从入门到精通_精通ffmpeg

()方法实现的腐蚀、膨胀、开运算和闭运算效果与前文中介绍的效果完全一致,本节不再赘述,下面将介绍 3 个特点鲜明的操作:梯度运算、顶帽运算和黑帽运算。

梯度运算

这里的梯度是指图像梯度,可以简单地理解为像素的变化程度。如果几个连续的像素,其像素值跨度越大,则梯度值越大。

梯度运算的运算过程如图 12.15 所示,让原图的膨胀图减原图的腐蚀图。因为膨胀图比原图大,腐蚀图比原图小,利用腐蚀图将膨胀图掏空,就得到了原图的轮廓图。

说明

梯度运算中得到的轮廓图只是一个大概轮廓,不精准。

import cv2
import numpy as np
img=cv2.imread('match/img_6.png')
k=np.ones((5,5),np.uint8)
cv2.imshow('img',img)
dst=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,k)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

顶帽运算

顶帽运算的运算过程如图 12.17 所示,让原图减原图的开运算图。因为开运算抹除图像的外部细节,「有外部细节」的图像减去「无外部细节」的图像,得到的结果就只剩外部细节了,所以经过顶帽运算之后,小蜘蛛就只剩蜘蛛腿了。

黑帽运算

黑帽运算的运算过程如图 12.19 所示,让原图的闭运算图减去原图。因为闭运算抹除图像的内部细节,「无内部细节」的图像减去「有内部细节」的图像,得到的结果就只剩内部细节了,所以经过黑帽运算之后,小蜘蛛就只剩下斑点、花纹和眼睛了。

import cv2
import numpy
import numpy as npimg=cv2.imread('match/img_6.png')
k=np.ones((5,5),np.uint8)
cv2.imshow('img',img)
dst=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,k)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

小结

本章介绍的基础内容是腐蚀和膨胀。读者掌握了其用法,就能轻而易举地实现开运算和闭运算。其中,开运算是对图像先进行腐蚀操作,再进行膨胀操作,其作用是抹除图像外部的细节;而闭运算是对图像先进行膨胀操作,再进行腐蚀操作,其作用是抹除图像内部的细节。此外,形态学运算也是构建在腐蚀和膨胀的基础上的。其中,梯度运算是让原图的膨胀图减原图的腐蚀图,得到的结果是原图的轮廓;顶帽运算是让原图减原图的开运算图,得到的结果是图像的外部细节;黑帽运算是让原图的闭运算图减去原图,得到的结果是图像的内部细节。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了