更新於 2024/02/02閱讀時間約 4 分鐘

[OpenCV基礎][Python]形態學運算(開、閉、禮帽、黑帽)

在影像處理中,我們總是會想把圖像內一些物件的特徵讓它明顯一點,形態學運算就是一個好用強大的工具。

形態學運算是圖像處理中的一個重要概念,用於改善改變圖像形狀。在OpenCV中,形態學運算提供了一系列操作,包括開運算閉運算禮帽運算黑帽運算。這些操作通常應用於二值圖像,用於去除噪聲連接物體擴張收縮物體等。

侵蝕膨脹可以參考以下這篇文章

[OpenCV基礎][Python]形態學運算(侵蝕、膨脹、梯度)


形態學運算的簡單介紹(開、閉、禮帽、黑帽)

範例結果彙整

開運算 (Opening):

  • 開運算是進行腐蝕進行膨脹的操作。
  • 主要用於消除小亮點斷裂,平滑物體的邊緣。

閉運算 (Closing):

  • 閉運算是進行膨脹,再進行腐蝕的操作。
  • 主要用於閉合物體內的小洞,平滑物體的邊緣。

禮帽運算 (Top Hat):

  • 禮帽運算是原始圖像−開運算
  • 主要用於突顯亮物體暗背景中的部分。

黑帽運算 (Black Hat):

  • 黑帽運算是原始圖像-閉運算
  • 主要用於突顯暗物體亮背景中的部分。

程式範例

開運算 (Opening):

移除影像中的白色雜訊或線條。

import cv2
import numpy as np

img = cv2.imread('3.png',cv2.IMREAD_GRAYSCALE) #讀取灰階圖
kernel = np.ones((11, 11), np.uint8) #結構元素(kernel)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) #開運算

cv2.imshow('Original Image', img)
cv2.imshow('Opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

開運算


閉運算 (Closing):

填補黑色小洞。

import cv2
import numpy as np

img = cv2.imread('3.png',cv2.IMREAD_GRAYSCALE)
kernel = np.ones((11, 11), np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) #閉運算

cv2.imshow('Original Image', img)
cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

閉運算


禮帽運算 (Top Hat):

顯現出白線條。

import cv2
import numpy as np

img = cv2.imread('3.png',cv2.IMREAD_GRAYSCALE)
kernel = np.ones((11, 11), np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) #禮帽運算

cv2.imshow('Original Image', img)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

禮帽運算


黑帽運算 (Black Hat):

顯現出黑點。

import cv2
import numpy as np

img = cv2.imread('3.png',cv2.IMREAD_GRAYSCALE)
kernel = np.ones((11, 11), np.uint8)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel) #黑帽運算

cv2.imshow('Original Image', img)
cv2.imshow('closing', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

黑帽運算


影像處理最重要的目的,就是要擷取你想要的物件特徵,收集多一點點工具,在適當的時候,在拿出來快速應用吧。









分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.