opencv_day09

#使用数组演示膨胀的基本原理
#只要当核kernel的任意一点处于前景图像中时,
#就将当前中心点所对应的膨胀结果图像内像素点的值置为1
import cv2
import numpy as np
img=np.zeros((5,5),np.uint8)
img[2:3,1:4]=1
kernel=np.ones((3,1),np.uint8)
dilation=cv2.dilate(img,kernel)
print('img=\n',img)
print('kernel=\n',kernel)
print('dilation=\n',dilation)

输出:
img=
[[0 0 0 0 0]
[0 0 0 0 0]
[0 1 1 1 0]
[0 0 0 0 0]
[0 0 0 0 0]]
kernel=
[[1]
[1]
[1]]
dilation=
[[0 0 0 0 0]
[0 1 1 1 0]
[0 1 1 1 0]
[0 1 1 1 0]
[0 0 0 0 0]]

#使用函数cv2.dilate()完成图像膨胀操作
import cv2
import numpy as np
img=cv2.imread('./image/erode.jpeg',-1)
kernel=np.ones((9,9),np.uint8)
dilation=cv2.dilate(img,kernel)
cv2.imshow('original',img)
cv2.imshow('dilation',dilation)
cv2.waitKey()
cv2.destroyWindow()

输出:
在这里插入图片描述

#调节函数cv2.dilate()的参数,实现不同参数控制下图像的膨胀效果
import cv2
import numpy as np
img=cv2.imread('./image/erode.jpeg',-1)
kernel=np.ones((5,5),np.uint8)
dilation=cv2.dilate(img,kernel,iterations=9)
cv2.imshow('original',img)
cv2.imshow('dilation',dilation)
cv2.waitKey()
cv2.destroyWindow()

输出:
在这里插入图片描述

#通用形态学函数
#将腐蚀和膨胀操作进行组合就可以的得到多种不同形式的运算
#dst=cv2.morphologyEx(src,op,kernel[,iterations[,borderType[,borderValue]]]]])
#开运算:先对图像进行腐蚀,然后对腐蚀的结果进行膨胀,开运算可以用于去噪,计数等
import cv2
import numpy as np
img1=cv2.imread('./image/xintaixue.png')
img2=cv2.imread('./image/erode.jpeg')
kernel=np.ones((5,5),np.uint8)
r1=cv2.morphologyEx(img1,cv2.MORPH_OPEN,kernel)
r2=cv2.morphologyEx(img2,cv2.MORPH_OPEN,kernel)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('r1',r1)
cv2.imshow('r2',r2)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#使用函数cv2.morphologyEx()实现闭运算
#就是先膨胀后腐蚀,可用于去除物体上的小黑点以及将不同的前景图像链接起来
import cv2
import numpy as np
img1=cv2.imread('./image/xintaixue.png')
img2=cv2.imread('./image/erode.jpg')
k=np.ones((10,10),![在这里插入图片描述](https://img-blog.csdnimg.cn/20191017151618820.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1OTY2NDc4,size_16,color_FFFFFF,t_70)np.uint8)
r1=cv2.morphologyEx(img1,cv2.MORPH_CLOSE,k,iterations=3)
r2=cv2.morphologyEx(img2,cv2.MORPH_CLOSE,k,iterations=3)
cv2.imshow('img1',img1)
cv2.imshow('result1',r1)
cv2.imshow('img2',img2)
cv2.imshow('result2',r2)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#形态学梯度运算:用图像的膨胀图像减去腐蚀图像的操作
#该操作可以获取原始图像中前景图像的边缘.
import cv2
import numpy as np
img=cv2.imread('./image/xintaixue.png',-1)
k=np.ones((5,5),np.uint8)
r=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,k)
cv2.imshow('original',img)
cv2.imshow('result',r)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#使用函数cv2.morphologyEx()实现礼帽运算
#礼帽运算:膨胀图像减去开运算图像,能够获得图像的噪声信息,或者得到比
#原始图像更亮的边缘信息
import cv2
import numpy as np
img1=cv2.imread('./image/xintaixue.png',-1)
img2=cv2.imread('./image/erode.jpeg',-1)
k=np.ones((5,5),np.uint8)
r1=cv2.morphologyEx(img1,cv2.MORPH_TOPHAT,k)
r2=cv2.morphologyEx(img2,cv2.MORPH_TOPHAT,k)
cv2.imshow('img1',img1)
cv2.imshow('r1',r1)
cv2.imshow('img2',img2)
cv2.imshow('r2',r2)
cv2.waitKey()
cv2.destroyWindow()

输出:
在这里插入图片描述

#使用函数cv2.morphologyEx()
#黑帽运算:用闭运算减去原始图像的操作,能够获得图像中的小孔或者前景色中的小黑点
#或者得到比原始图像更暗的边缘部分
import cv2
import numpy as np
img1=cv2.imread('./image/xintaixue.png',-1)
img2=cv2.imread('./image/erode.jpg',-1)
k=np.ones((5,5),np.uint8)
r1=cv2.morphologyEx(img1,cv2.MORPH_BLACKHAT,k)
r2=cv2.morphologyEx(img2,cv2.MORPH_BLACKHAT,k)
cv2.imshow('original1',img1)
cv2.imshow('original2',img2)
cv2.imshow('result1',r1)
cv2.imshow('result2',r2)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

#使用函数cv2.getStructuringElement()生成不同结构的核
import cv2
k1=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
k2=cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
k3=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
print('kernel1=\n',k1)
print('kernel2=\n',k2)
print('kernel3=\n',k3)

输出:
kernel1=
[[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]]
kernel2=
[[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]]
kernel3=
[[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]]

#编写程序的,观察不同的核对形态学操作的影响
import cv2
import numpy as np
img=cv2.imread('./image/xintaixue.png',-1)
k1=cv2.getStructuringElement(cv2.MORPH_RECT,(59,59))
k2=cv2.getStructuringElement(cv2.MORPH_CROSS,(59,59))
k3=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(59,59))
dst1=cv2.dilate(img,k1)
dst2=cv2.dilate(img,k2)
dst3=cv2.dilate(img,k3)
cv2.imshow('original',img)
cv2.imshow('dst1',dst1)
cv2.imshow('dst2',dst2)
cv2.imshow('dst3',dst3)
cv2.waitKey()
cv2.destroyAllWindows()

输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值