日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【opencv】(4) 形态学处理:腐蚀膨胀、梯度运算、礼帽黑帽

發布時間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【opencv】(4) 形态学处理:腐蚀膨胀、梯度运算、礼帽黑帽 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

各位同學好,今天和大家分享一下圖像的形態學處理方法。內容有:

膨脹腐蝕、開運算和閉運算、梯度運算、禮帽和黑帽

(1)腐蝕:cv2.erode();(2)膨脹:cv2.dilate();(3)形態學函數:cv2.morphologyEx();

那我們開始吧。


我們先導入接下來操作需要的庫文件和圖像數據

import cv2
import numpy as np
# 指定圖片所在文件夾
filepath = 'C:\\...\\img\\changed'
# 獲取文件夾中的某張圖
img = cv2.imread(filepath+'\\wiseman.jpg')
# 顯示圖片
cv2.imshow('wiseman',img)
cv2.waitKey(0) # 設置圖片不會自動消失
cv2.destroyAllWindows()  # 任意鍵關閉圖像

1. 腐蝕操作

腐蝕操作,一般處理二值化圖像,黑白圖像,白色區域減少。簡單理解為,卷積核在圖像上移動的過程中,如果卷積核所框住的部分全為黑或全為白,圖像不變;如果既有黑又有白,那么按一定策略將白變黑。

腐蝕函數:?cv2.erode(img, kernel, iterations)

img為輸入的圖像。kernel為卷積核大小,卷積核越小,腐蝕越慢,需要的迭代次數越多。
iterations為迭代次數。iterations=2,表示在完成第一次腐蝕的結果圖像上再進行腐蝕。

# 5*5的全1卷積核;uint8是專門用于存儲各種圖像的(包括RGB,灰度圖像等),范圍是從0–255
kernel = np.ones((5,5),np.uint8)
# 參數為:輸入圖像,卷積核,迭代次數=1
img2 = cv2.erode(img, kernel, iterations=1)
# 顯示圖片
cv2.imshow('wiseman2',img2)
cv2.waitKey(0) 
cv2.destroyAllWindows()  

下圖左側為原圖,右圖為腐蝕后的圖

? ? ? ? ? ??


2. 膨脹操作?

膨脹操作,一般處理二值化圖像,白色區域增大。和腐蝕相反,卷積核在圖像上移動的過程中,如果既有黑又有白,那么按一定策略將黑變白。

腐蝕函數:?cv2.dilate(img, kernel, iterations)

參數同上,img為輸入的圖像。kernel為卷積核大小。iterations為迭代次數。

#(2)膨脹操作
# 設置卷積核3*3全1
kernel = np.ones((3,3),np.uint8)
# 傳入圖像,卷積核,迭代次數
img3 = cv2.dilate(img, kernel, iterations=1)
# 顯示圖片
cv2.imshow('wiseman3',img3)
cv2.waitKey(0) 
cv2.destroyAllWindows()  

下圖左側為原圖,右圖為膨脹后的圖

? ? ? ? ??


3. 形態學函數

cv2.morphologyEx(img, op, kernel)

img代表輸入圖像;kernel代表卷積核;op代表形態學處理參數,如下

MORPH_ERODE腐蝕(黑變多),與腐蝕函數cv2.erode效果相同

MORPH_DILATE膨脹(白變多),與膨脹函數cv2.dilate效果相同

MORPH_OPEN開運算,先腐蝕后膨脹。平滑邊界,去除凸起,移除小白點

MORPH_CLOSE閉運算,先膨脹再腐蝕。填充圖像內部小黑洞,填充圖像凹陷

MORPH_GRADIENT梯度計算,用膨脹圖減腐蝕圖。獲得圖像的邊緣輪廓

MORPH_TOPHAT禮帽,用原圖像減去開運算后的圖像。獲得原圖像中比周圍亮的區域

MORPH_BLACKHAT 黑帽,閉運算圖像減去原圖像。獲取原圖像中比周圍暗的區域


4. 開運算

先腐蝕后膨脹,白色區域先變小后擴張,平滑邊界(去掉凸起)、移除白點

cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

#(3)開運算:先腐蝕后膨脹
# 定義卷積核
kernel = np.ones((3,3),np.uint8)
# 形態學函數:圖像,開運算,卷積核
img4 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# 顯示圖片
cv2.imshow('opening',img4)
cv2.waitKey(0) 
cv2.destroyAllWindows()  

效果圖在下面。


5. 閉運算

先膨脹后腐蝕,白色區域先變大后縮小,閉運算用于填充圖像內部的小黑洞、填充圖像的凹陷等,排除小黑洞,連接被誤分為許多小塊的對象

#(4)閉運算:先膨脹后腐蝕
# 定義卷積核
kernel = np.ones((3,3),np.uint8)
# 形態學函數:圖像,閉運算,卷積核
img4 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
# 顯示圖片
cv2.imshow('closing',img4)
cv2.waitKey(0) 
cv2.destroyAllWindows()  

第一張為原圖,第二張為開運算,第三張為閉運算


6. 梯度計算

梯度圖,用膨脹圖減腐蝕圖。可以用于獲得圖像中物體的輪廓,可以突出團塊的邊緣,保留物體的邊緣輪廓。

# ==2== 梯度運算,膨脹圖像減去腐蝕圖像,得到輪廓信息
# 卷積核
kernel = np.ones((3,3),np.uint8)
# 形態學處理函數,輸入圖像,梯度計算參數,卷積核
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
# 繪圖,查看邊界信息
cv2.imshow('gradient',gradient)
cv2.waitKey(0)
cv2.destoryAllWindows()

下圖第一張是膨脹圖像,第二張是腐蝕圖像,第三張是梯度圖


7. 禮帽

禮帽 = 原始輸入 - 開運算結果

可以用于獲得原圖像中比周圍亮的區域,去除白色重疊部分

# ==1== 禮帽
# 獲取圖像
img = cv2.imread(filepath+'\\wiseman.jpg')
# 卷積核
kernel = np.ones((8,8),np.uint8)
# 形態學處理函數,輸入圖像,梯度計算參數,卷積核
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
# 繪圖,查看邊界信息
cv2.imshow('tophat',tophat)
cv2.waitKey(0)
cv2.destoryAllWindows()

第一張為原圖,第二張為開運算,第三張是禮帽


8. 黑帽

黑帽 = 閉運算-原始輸入

可以用于獲取原圖像中比周圍暗的區域,保留白色重疊部分

# ==2== 黑帽
# 獲取圖像
img = cv2.imread(filepath+'\\wiseman.jpg')
# 卷積核
kernel = np.ones((8,8),np.uint8)
# 形態學處理函數,輸入圖像,梯度計算參數,卷積核
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
# 繪圖,查看邊界信息
cv2.imshow('blackhat',blackhat)
cv2.waitKey(0)
cv2.destoryAllWindows()

第一張是閉運算,第二張是原圖,第三張是黑帽

總結

以上是生活随笔為你收集整理的【opencv】(4) 形态学处理:腐蚀膨胀、梯度运算、礼帽黑帽的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。