Python 影象處理 OpenCV (10):影象處理形態學之頂帽運算與黑帽運算
阿新 • • 發佈:2020-06-15
![](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」進行