1.图像腐蚀
这个操作会把前景物体的边界腐蚀掉。这是怎么做到的呢?卷积核沿着图像滑动,如果与卷积核对应的图像的所有像素值都是1,那么该区域的所有像素值就是1,否则为0。用于去除白噪声和断开两个连在一起的物体等。
语法:cv2.erode(img,kernel,iterations=1)
img:表示输入图像。
kernel:表示定义的卷积核。
iterations:表示迭代腐蚀的次数,通俗的说就是腐蚀多少次。
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#腐蚀操作 将有价值的信息缩小
kernel=np.ones((30,30),np.uint8)
erode1=cv2.erode(img,kernel,iterations=1) #迭代次数1
erode2=cv2.erode(img,kernel,iterations=2) #迭代次数2
erode3=cv2.erode(img,kernel,iterations=3) #迭代次数3
res=np.hstack((img,erode1,erode2,erode3))
cv2.imshow('erode', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行效果
2.图像膨胀
语法:cv2.dilate(img,kernel,iterations=2)
img:表示输入图像。
kernel:表示定义的卷积核。
iterations:表示迭代腐蚀的次数,通俗的说就是腐蚀多少次。
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#膨胀操作 将有价值的信息放大
kernel=np.ones((30,30),np.uint8)
dilate1=cv2.dilate(img,kernel,iterations=1) #迭代次数1
dilate2=cv2.dilate(img,kernel,iterations=2) #迭代次数2
dilate3=cv2.dilate(img,kernel,iterations=3) #迭代次数3
res2=np.hstack((img,dilate1,dilate2,dilate3))
cv2.imshow('dilate', res2)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行效果
3.开运算:先腐蚀,再膨胀
语法:cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#开运行:先腐蚀,再膨胀
kernel=np.ones((30,30),np.uint8)
open=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow('open', open)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.闭运算:先膨胀,再腐蚀
语法:cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#闭运算:先膨胀,再腐蚀
kernel=np.ones((30,30),np.uint8)
close=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow('close', close)
cv2.waitKey(0)
cv2.destroyAllWindows()
5.梯度、礼帽、黑帽
梯度=膨胀-腐蚀(cv2.MORPH_GRADIENT)
礼帽=原始输入-开运算结果(cv2.MORPH_TOPHAT)
黑帽=闭运算结果-原始输入(cv2.MORPH_BLACKHAT)
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#梯度=膨胀-腐蚀
kernel=np.ones((5,5),np.uint8)
gradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
#礼帽=原始输入-开运算结果
kernel=np.ones((5,5),np.uint8)
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
#黑帽=闭运算结果-原始输入
kernel=np.ones((5,5),np.uint8)
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('blackhat', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()