Python-Opencv学习总结(五):形态学转换

形态学转换主要针对是二值图像
两个输入对象:1.二值图像,2.卷积核:一个数组

1、图像腐蚀

图像的边变得更细了。可以去除噪声(边上的毛刺)
卷积核的中心点逐个像素扫描原始图像;被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则值为0。
卷积核中心点遍历原始图像,当卷积核中心点所在位置的两边都是白色,即像素值为1的时候,才保留原始图像这个点。
当卷积核中心点所在位置的两边颜色不一样时,则将该处的原始图像设置为0,即变成黑色了。

使用函数erode
dst=cv2.erode(src,kernel,iterations)
src:源图像
kernel:卷积核,一般用一个5行5列的全是1的数组,生成:kernel=np.ones((5,5),np.uint8)
iterations:迭代次数,要进行多少次腐蚀
iterations默认情况下,迭代次数是1,根据需要可以进行多次腐蚀操作。

kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(o,kernel) 迭代次数为1
erosion = cv2.erode(o,kernel,iterations = 9) 迭代9次

import cv2
import numpy as np
o=cv2.imread(r'D:\image\test1.png',cv2.IMREAD_UNCHANGED)
k=np.ones((5,5),np.uint8)
r=cv2.erode(o,k,iterations=4)
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()

2、图像膨胀

是腐蚀操作的逆操作,图像变大了
图像被腐蚀后,去除了噪声(边上的毛刺),但是会压缩图像。对腐蚀过的图像,进行膨胀处理,可以去除噪声,并保持原有形状。
使用函数dilate
dst=cv2.dilate(src,kernel,iterations)
src:源图像
kernel:卷积核,kernel二np.ones((5,5),np.uint8)
iterations:迭代次数,

import cv2
import numpy as np
o=cv2.imread(r'D:\image\test1.png',cv2.IMREAD_UNCHANGED)
k=np.ones((5,5),np.uint8)
r=cv2.dilate(o,k,iterations=5)
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()

3、图像开运算

经过两次运算:腐蚀+膨胀
关键词:cv2.MORPH_OPEN
函数morphologyEx
opening=cv2.morphologyEx(img,cv2.MORPH_OPEN, kerne)
opening:开运算结果
img:源图像
cv2.MORPH_OPEN:开运算(固定)
kernel:卷积核
k=np.ones((5,5),np.uint8)

import cv2
import numpy as np
o=cv2.imread(r'D:\image\test1.png')
k=np.ones((10,10),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_OPEN,k)
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()

4、图像闭运算

先膨胀,后腐蚀
它有助于关闭前景物体内部的小孔,或物体上的小黑点。
关键词:cv2.MORPH_CLOSE
函数morphologyEx
closing=cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
closing:闭运算结果
img:源图像
cv2.MORPH_CLOSE:闭运算
kernel:卷积核
k=np.ones((5,5),np.uint8)

import cv2
import numpy as np
o=cv2.imread(r'D:\image\test1.png')
k=np.ones((10,10),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_CLOSE,k)
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()

5、图像梯度运算

膨胀图像减去腐蚀图像=轮廓图像
梯度(image)=膨胀(image)-腐蚀(image)
关键词:cv2.MORPH_GRADIENT
result = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
result:梯度结果
img:原图像
cv2.MORPH GRADIENT,梯度
kernel:卷积核

import cv2
import numpy as np
o=cv2.imread(r'D:\image\test1.png')
k=np.ones((5,5),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_GRADIENT,k)
cv2.imshow('o',o)
cv2.imshow('r',r)
cv2.waitKey()
cv2.destroyAllWindows()

6、图像顶帽

礼帽图像=原始图像-开运算图像=得到噪声图像
关键词:cv2.MORPH_TOPHAT
result = cv2.morphologyEx(img,cv2.MORPH_TOPHAT, kernel)
cv2.MORPH_TOPHAT:礼帽
k=np.ones((5,5),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_ TOPHAT,k)

7、图像黑帽

黑帽图像=闭运算图像-原始图像
得到图像内部的小孔,或前景色中的小黑点
result = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.MORPH_BLACKHAT:黑帽
k=np.ones((5,5),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_ BLACKHAT,k)

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值