6.Opencv-图像腐蚀、膨胀(开运算,闭运算)

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()

猜你喜欢

转载自blog.csdn.net/a497785609/article/details/131208393