图像的形态学转换
1-图像腐蚀
形态学转换主要是针对二值图像(非黑即白)。腐蚀图像的前景色
两个输入对象。
- 对象1:二值图像
- 对象2:卷积核:
卷积核的中心点逐个扫描原始图像

卷积核随着他的中心在扫描的过程中,如果卷积核区域内的像素值都是一致的则图片该位置的像素保持不变;
如果卷积核区域内的像素有差异,例如图右边所示,卷积核一部分在白色区域,一部分在黑色区域,则卷积核所处区域的图像进行腐蚀。

代码:
#图像形态学转换——图像腐蚀
#erode函数
#dst=cv2.erode(src.kernel,iterations)
#kenel——卷积核,用numpy来生成
# Iteration——迭代次数;默认情况下。迭代次数是1,表示腐蚀一次;根据需要可以进行多次腐蚀
import cv2
import numpy as np
o=cv2.imread("image\\erode.bmp",cv2.IMREAD_UNCHANGED)
#利用numpy生成核
k=np.ones((5,5),np.uint8)
r=cv2.erode(o,k,iterations=4)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

2-图像膨胀:是腐蚀的逆向操作,膨胀的对象是前景色
膨胀操作的应用:
- 图像被腐蚀后,去除噪声,但是会被压缩图像
- 对腐蚀过后的图像,进行膨胀操作,可以去除噪声,并保持原有的形状

import cv2
import numpy as np
o=cv2.imread("image\\dilation.bmp",cv2.IMREAD_UNCHANGED)
k=np.ones((5,5),np.uint8)
r=cv2.dilate(o,k,iterations=1)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.imwrite("G:\\photo\\blog\\img\\erode1.jpg",o)
cv2.imwrite("G:\\photo\\blog\\img\\erode2.jpg",r)
cv2.waitKey()
cv2.destroyAllWindows()

3,开运算:有利于处理掉前景物物体外部的噪声
原图像——腐蚀处理——膨胀处理;
开运算(img)=腐蚀(膨胀(img))
- 图像被腐蚀后,去除噪声,但是会被压缩图像
- 对腐蚀过后的图像,进行膨胀操作,可以去除噪声,并保持原有的形状

#图像形态学——开运算
#morphologyEx函数
#opening=cv2.morphologyEx(src,cv2.MORPH_OPEN,kenerl)
#openning——进行开运算后的图像返回结果;
import cv2
import numpy as np
o=cv2.imread("image\\opening.bmp",cv2.IMREAD_UNCHANGED)
k=np.ones((10,10),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_OPEN,k)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
4,闭运算:有利于去除掉前景物内部的噪声
原图像——膨胀处理——腐蚀处理
闭运算(img)=膨胀(腐蚀(img))
- 先膨胀,后腐蚀
- 有利于处理掉前景物体上的小孔或小黑点

#图像形态学——闭运算
#morphologyEx函数
#closing=cv2.morphologyEx(src,cv2.MORPH_CLOSE,kenerl)
#closing——进行开运算后的图像返回结果;
import cv2
import numpy as np
o=cv2.imread("image\\closing.bmp",cv2.IMREAD_UNCHANGED)
k=np.ones((10,10),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_CLOSE,k)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.imwrite("G:\\photo\\blog\\img\\erode1.jpg",o)
cv2.imwrite("G:\\photo\\blog\\img\\erode2.jpg",r)
cv2.waitKey()
cv2.destroyAllWindows()
5,梯度运算
对原始图像进行腐蚀后,然后对两个图做差
梯度运算=膨胀图像-腐蚀运算

import cv2
import numpy as np
o=cv2.imread("image\\gradient.bmp",cv2.IMREAD_UNCHANGED)
k=np.ones((5,5),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_GRADIENT,k)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
6,图像顶帽
- 礼帽图像=原始图像-开运算图像
- 得到噪声图像
#图像形态学——礼帽运算
#morphologyEx函数
#tophat=cv2.morphologyEx(src,cv2.MORPH_TOPHAT,kenerl)
#tophat——进行开运算后的图像返回结果;
import cv2
import numpy as np
o=cv2.imread("image\\tophat.bmp",cv2.IMREAD_UNCHANGED)
k=np.ones((5,5),np.uint8)
r=cv2.morphologyEx(o,cv2.MORPH_TOPHAT,k)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

浙公网安备 33010602011771号