OpenCV-Python实战(10)——形态学

1、腐蚀 cv2.erode()

可以删除图像中的噪音点。

可以删除毛边。

分割图像(当图像连接的不够紧密时) 。

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

img:目标图像。

src:原始图像。

kernel:腐蚀核大小。

anchor:锚点位置,默认是:(-1,-1),核的中心。

iterations:腐蚀操作迭代次数。

borderType、borderValue:边界样式,边界值,使用默认即可。

import cv2
import numpy as np

pie = cv2.imread('pie.png')  # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-2):int(h/2+2),50:w-50]=0 # 在圆中间画一条线

img1 = cv2.erode(src=pie,kernel=(11,11),iterations=3)  # 腐蚀

cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、膨胀 cv2.dilate()

图像沿着边缘向外扩展的操作。

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

img:目标图像。

src:原始图像。

kernel:腐蚀核大小。

anchor:锚点位置,默认是:(-1,-1),核的中心。

iterations:腐蚀操作迭代次数。

borderType、borderValue:边界样式,边界值,使用默认即可。

import cv2
import numpy as np

pie = cv2.imread('pie.png')  # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-2):int(h/2+2),50:w-50]=0 # 在圆中间画一条线

img1 = cv2.dilate(src=pie,kernel=(11,11),iterations=4)

cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

3、形态学通用函数 cv2.morphologyEx()

img = cv2.morphologyEx(src=*,op=*,kernel=*,anchor=*,iterations=*,borderType=*,borderValue=*)

img:目标图像。

src:原始图像。

op:操作方式,常见操作方式如下表所示:

操作方式解释
MOREPH_ERODE腐蚀
MOREPH_DILATE膨胀
MOREPH_OPEN开运算
MOREPH_CLOSE闭运算
MOREPH_GRADIENT形态学梯度
MOREPH_TOPHAT礼貌运算
MOREPH_BLACKHAT黑帽运算

kernel:腐蚀核大小。

anchor:锚点位置,默认是:(-1,-1),核的中心。

iterations:腐蚀操作迭代次数。

borderType、borderValue:边界样式,边界值,使用默认即可。

4、开运算 cv2.morphologyEx()

先做腐蚀,在做膨胀操作。

import cv2
import numpy as np

pie = cv2.imread('pie.png')  # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-1):int(h/2+1),50:w-50]=255 # 在圆中间画一条线

img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_OPEN,kernel=(11,11),iterations=3)

cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

5、闭运算  

先做膨胀操作,在做腐蚀操作。 

import cv2
import numpy as np

pie = cv2.imread('pie.png')  # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-1):int(h/2+1),50:w-50]=0 # 在圆中间画一条线

img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_CLOSE,kernel=(11,11),iterations=3)

cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

 6、形态学梯度

膨胀操作后的图像 - 腐蚀操作后的图像 = 图像边缘 

import cv2

pie = cv2.imread('pie.png')  # 圆


img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_GRADIENT,kernel=(11,11),iterations=3)

cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

 7、礼帽运算

原始图像 - 开运算图像 = 礼帽运算

可以得到原始图像的噪音点。

import cv2
import numpy as np

pie = cv2.imread('pie.png')

h,w = pie.shape[:2]
pie[int(h/2-1):int(h/2+1),:]=255 # 在圆中间画一条线

img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_TOPHAT,kernel=(11,11))

cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

 8、黑帽运算

 原始图像 - 闭运算图像 = 黑帽运算

import cv2
import numpy as np

pie = cv2.imread('pie.png')

h,w = pie.shape[:2]
pie[int(h/2-1):int(h/2+1),:]=255 # 在圆中间画一条线

img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_BLACKHAT,kernel=(11,11))

cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

9、核函数

kernel = cv2.getStructuringElement(shape=*,ksize=,anchor=*)

kernel:核矩阵。

shape:内核形状,常见的参数如下:

参数解释
MORPH_RECT所有元素都是1
MORPH_ELLIPSE椭圆形位置为1
MORPH_CROSS十字形位置是1

ksize:内核大小。

anchor:内核锚点,默认为:(-1,-1),核中心位置。

import cv2

kernel1 = cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(5,5))
kernel2 = cv2.getStructuringElement(shape=cv2.MORPH_ELLIPSE,ksize=(5,5))
kernel3 = cv2.getStructuringElement(shape=cv2.MORPH_CROSS,ksize=(5,5))
print(kernel1)
print(kernel2)
print(kernel3)

cv2.waitKey(0)
cv2.destroyAllWindows()
[[1 1 1 1 1]    [[0 0 1 0 0]    [[0 0 1 0 0]
 [1 1 1 1 1]     [1 1 1 1 1]     [0 0 1 0 0]
 [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]     [0 0 1 0 0]
 [1 1 1 1 1]]    [0 0 1 0 0]]    [0 0 1 0 0]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码贾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值