OpenCV:圖像的腐蝕和膨脹


圖像的腐蝕和膨脹實際上是利用卷積進行計算,首先導包:

import numpy as np
import cv2
import matplotlib.pyplot as plt
def show(image):
    plt.imshow(image)
    plt.axis('off')
    plt.show()
def imread(image):
    image=cv2.imread(image)
    image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    return image

然后生成一個正方形的核:

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
print(kernel)

輸出:

[[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]]

當然我們作運算的時候都是使用的正方形的核,這里也展示下生成橢圓核的方法:

kernel=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(10,10))#這里生成的是橢圓
print(kernel)

生成十字形的核:

kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))#這里生成的是十字形
print(kernel)

利用卷積進行圖像的腐蝕:可以使黑色的點變大

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
ero=cv2.erode(image,kernel)
show(ero)

循環進行多次腐蝕:

show(image)
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
for i in range(2):
    ero=cv2.erode(image,kernel,iterations=i+1)
    show(ero)

圖像的膨脹,使白色的點變大,用於去除圖像當中的黑點:

show(image)#利用卷積將圖像進行膨脹,求解的是區域最大值,腐蝕則是求解的區域最小值
dilation=cv2.dilate(image,kernel)
show(dilation)#用於去除圖像當中黑色的小點

循環去除:

image=imread('123.jpg')
show(image)
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(21,21))
for i in range(3):
    ero=cv2.erode(image,kernel,iterations=i+1)
    show(dilation)

下面是處理朱茵圖片進行膨脹的效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM