前文傳送門:
「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」進行獲取。