Python 影像處理 OpenCV (10):影像處理形態學之頂帽運算與黑帽運算

極客挖掘機發表於2020-06-15

前文傳送門:

「Python 影像處理 OpenCV (1):入門」

「Python 影像處理 OpenCV (2):畫素處理與 Numpy 操作以及 Matplotlib 顯示影像」

「Python 影像處理 OpenCV (3):影像屬性、影像感興趣 ROI 區域及通道處理」

「Python 影像處理 OpenCV (4):影像算數運算以及修改顏色空間」

「Python 影像處理 OpenCV (5):影像的幾何變換」

「Python 影像處理 OpenCV (6):影像的閾值處理」

「Python 影像處理 OpenCV (7):影像平滑(濾波)處理」

「Python 影像處理 OpenCV (8):影像腐蝕與影像膨脹」

「Python 影像處理 OpenCV (9):影像處理形態學開運算、閉運算以及梯度運算」

引言

今天是圖形處理形態學的最後一篇,我們介紹頂帽運算和黑帽運算。

建議先閱讀前面兩篇影像處理的內容:

「Python 影像處理 OpenCV (8):影像腐蝕與影像膨脹」

「Python 影像處理 OpenCV (9):影像處理形態學開運算、閉運算以及梯度運算」

形態學之頂帽運算

影像處理頂帽運算是一個獲取影像噪聲的運算,它是由原始影像減去影像開運算而得到的結果:

頂帽運算 = 原始影像 - 開運算

影像頂帽運算同樣是使用形態學擴充套件函式 morphologyEx() ,它的引數是 MORPH_TOPHAT ,示例如下:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖片
source = cv.imread("demo_noise_white.jpg", cv.IMREAD_GRAYSCALE)

# 設定卷積核
kernel = np.ones((5, 5), np.uint8)

# 開運算
open = cv.morphologyEx(source, cv.MORPH_OPEN, kernel)

# 頂帽運算
dst = cv.morphologyEx(source, cv.MORPH_TOPHAT, kernel)

# 顯示結果
titles = ['Source Img','Open Img', 'Tophat Img']
images = [source, open, dst]

# matplotlib 繪圖
for i in range(3):
   plt.subplot(1, 3, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

形態學之黑帽運算

影像處理頂帽運算是一個獲取影像內部的小孔,或者前景色中的小黑點的運算。

它是由影像閉運算減去原始影像的操作:

黑帽運算 = 閉運算影像 - 原始影像

影像頂帽運算同樣是使用形態學擴充套件函式 morphologyEx() ,它的引數是 MORPH_BLACKHAT ,示例如下:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖片
source = cv.imread("demo_noise_black.jpg", cv.IMREAD_GRAYSCALE)

# 設定卷積核
kernel = np.ones((5, 5), np.uint8)

# 黑帽運算
dst = cv.morphologyEx(source, cv.MORPH_BLACKHAT, kernel)

# 構造顯示結果陣列
titles = ['Source Img', 'Black Img']
images = [source, dst]

# matplotlib 繪圖
for i in range(2):
   plt.subplot(1, 2, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

今天的內容比較短,至此,影像形態學的幾個基礎的運算已經全部介紹完畢,希望各位同學能理解這幾個運算的原理,而不是僅僅知道了幾個引數或者說幾個方法的呼叫。

示例程式碼

如果有需要獲取原始碼的同學可以在公眾號回覆「OpenCV」進行獲取。

相關文章