1. 程式人生 > >Python 影象處理 OpenCV (10):影象處理形態學之頂帽運算與黑帽運算

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

![](https://cdn.geekdigging.com/opencv/opencv_header.png) 前文傳送門: [「Python 影象處理 OpenCV (1):入門」](https://www.geekdigging.com/2020/05/17/5513454552/) [「Python 影象處理 OpenCV (2):畫素處理與 Numpy 操作以及 Matplotlib 顯示影象」](https://www.geekdigging.com/2020/05/18/4936041986/) [「Python 影象處理 OpenCV (3):影象屬性、影象感興趣 ROI 區域及通道處理」](https://www.geekdigging.com/2020/05/19/1227329671/) [「Python 影象處理 OpenCV (4):影象算數運算以及修改顏色空間」](https://www.geekdigging.com/2020/05/21/1757913240/) [「Python 影象處理 OpenCV (5):影象的幾何變換」](https://www.geekdigging.com/2020/05/23/4331122737/) [「Python 影象處理 OpenCV (6):影象的閾值處理」](https://www.geekdigging.com/2020/06/03/6651375581/) [「Python 影象處理 OpenCV (7):影象平滑(濾波)處理」](https://www.geekdigging.com/2020/06/06/8676263283/) [「Python 影象處理 OpenCV (8):影象腐蝕與影象膨脹」](https://www.geekdigging.com/2020/06/08/5731186312/) [「Python 影象處理 OpenCV (9):影象處理形態學開運算、閉運算以及梯度運算」](https://www.geekdigging.com/2020/06/11/5023174082/) ## 引言 今天是圖形處理形態學的最後一篇,我們介紹頂帽運算和黑帽運算。 建議先閱讀前面兩篇影象處理的內容: [「Python 影象處理 OpenCV (8):影象腐蝕與影象膨脹」](https://mp.weixin.qq.com/s/XN5v9Uq0LITwqzGrUR3BQQ) [「Python 影象處理 OpenCV (9):影象處理形態學開運算、閉運算以及梯度運算」](https://mp.weixin.qq.com/s/tv-gPfrDUqqeCTkJpHriyg) ## 形態學之頂帽運算 影象處理頂帽運算是一個獲取影象噪聲的運算,它是由原始影象減去影象開運算而得到的結果: ```shell 頂帽運算 = 原始影象 - 開運算 ``` ![](https://cdn.geekdigging.com/opencv/10/tophat_result_1.png) 影象頂帽運算同樣是使用形態學擴充套件函式 `morphologyEx()` ,它的引數是 `MORPH_TOPHAT` ,示例如下: ```python 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() ``` ![](https://cdn.geekdigging.com/opencv/10/tophat_result_2.png) ## 形態學之黑帽運算 影象處理頂帽運算是一個獲取影象內部的小孔,或者前景色中的小黑點的運算。 它是由影象閉運算減去原始影象的操作: ```shell 黑帽運算 = 閉運算影象 - 原始影象 ``` ![](https://cdn.geekdigging.com/opencv/10/black_result_1.png) 影象頂帽運算同樣是使用形態學擴充套件函式 `morphologyEx()` ,它的引數是 `MORPH_BLACKHAT` ,示例如下: ```python 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() ``` ![](https://cdn.geekdigging.com/opencv/10/black_result_2.png) 今天的內容比較短,至此,影象形態學的幾個基礎的運算已經全部介紹完畢,希望各位同學能理解這幾個運算的原理,而不是僅僅知道了幾個引數或者說幾個方法的呼叫。 ## 示例程式碼 如果有需要獲取原始碼的同學可以在公眾號回覆「OpenCV」進行