OpenCV 形態(tài)學變換的實現(xiàn)示例
一、引言
在計算機視覺領域,形態(tài)學變換是一種基于圖像形狀的簡單操作,常用于圖像預處理、特征提取等任務。OpenCV 作為一個強大的計算機視覺庫,提供了豐富的形態(tài)學變換函數(shù)。本文將詳細介紹 OpenCV 中常見的形態(tài)學變換操作,并通過 Python 代碼展示如何對一張貓咪圖像進行這些操作。
二、環(huán)境準備
在運行代碼之前,你需要安裝 OpenCV 庫。可以使用以下命令進行安裝:
pip install opencv-python
三、代碼實現(xiàn)
1. 導入必要的庫
import cv2 import numpy as np
2. 腐蝕操作
腐蝕操作會使圖像中的前景物體變小,通常用于去除小的噪聲點。
二值圖腐蝕后白色像素(非0)變少了。
# 腐蝕 def test001(): img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE) kernel = np.ones((3, 3), np.uint8) # img_erode=cv2.erode(img,kernel=kernel,iterations=2) img_erode = cv2.erode(img, kernel=kernel) img_erode = cv2.erode(img_erode, kernel=kernel) cv2.imshow("img", img) cv2.imshow("img_erode", img_erode) cv2.waitKey(0)
3. 膨脹操作
膨脹操作會使圖像中的前景物體變大,通常用于連接斷裂的物體。
二值圖膨脹后白色像素變多了。
# 膨脹 def test002(): img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE) kernel = np.ones((3, 3), np.uint8) img_dilate = cv2.dilate(img, kernel=kernel, iterations=2) cv2.imshow("img", img) cv2.imshow("img_dilate", img_dilate) cv2.waitKey(0)
4. 開運算
開運算先進行腐蝕操作,再進行膨脹操作,常用于去除小的前景物體。
# 開運算:先腐蝕后膨脹 def test003(): img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE) kernel = np.ones((3, 3), np.uint8) img_open = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel=kernel) cv2.imshow("img", img) cv2.imshow("img_open", img_open) cv2.waitKey(0)
5. 閉運算
閉運算先進行膨脹操作,再進行腐蝕操作,常用于填充前景物體內部的小孔。
# 閉運算:先膨脹后腐蝕 def test004(): img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE) kernel = np.ones((3, 3), np.uint8) img_close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel=kernel) cv2.imshow("img", img) cv2.imshow("img_close", img_close) cv2.waitKey(0)
6. 禮帽操作
禮帽操作是原始圖像與開運算結果之差,常用于突出圖像中的噪聲點。
# 禮帽:原始圖像與開運算之差 def test005(): img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE) kernel = np.ones((3, 3), np.uint8) img_tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel=kernel) cv2.imshow("img", img) cv2.imshow("img_tophat", img_tophat) cv2.waitKey(0)
7. 黑帽操作
黑帽操作是閉運算結果與原始圖像之差,常用于突出圖像中的小孔。
# 黑帽:閉運算與原始圖像之差 def test006(): img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE) kernel = np.ones((3, 3), np.uint8) img_blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel=kernel) cv2.imshow("img", img) cv2.imshow("img_blackhat", img_blackhat) cv2.waitKey(0)
8. 形態(tài)學梯度操作
形態(tài)學梯度操作是膨脹結果與腐蝕結果之差,常用于突出圖像的邊緣。
# 形態(tài)學梯度:膨脹與腐蝕之差 def test007(): img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE) kernel = np.ones((3, 3), np.uint8) img2 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) cv2.imshow("img", img) cv2.imshow("img2", img2) cv2.waitKey(0)
9. 主函數(shù)調用
if __name__ == '__main__': # test001() # test002() # test003() # test004() # test005() # test006() test007()
四、代碼解釋
- 導入庫:導入了
cv2
和numpy
庫,cv2
用于圖像處理,numpy
用于創(chuàng)建核。 - 讀取圖像:使用
cv2.imread
函數(shù)讀取貓咪圖像,并將其轉換為灰度圖像。 - 創(chuàng)建核:使用
np.ones
函數(shù)創(chuàng)建一個 3x3 的核,用于形態(tài)學變換。 - 形態(tài)學變換:使用
cv2.erode
、cv2.dilate
和cv2.morphologyEx
函數(shù)進行不同的形態(tài)學變換。 - 顯示圖像:使用
cv2.imshow
函數(shù)顯示原始圖像和變換后的圖像。 - 等待按鍵:使用
cv2.waitKey
函數(shù)等待用戶按下任意鍵關閉窗口。
五、總結
通過本文的介紹,你學會了如何使用 OpenCV 進行常見的形態(tài)學變換操作。這些操作在圖像預處理、特征提取等任務中非常有用。你可以根據(jù)自己的需求選擇合適的形態(tài)學變換操作,對圖像進行處理。
到此這篇關于OpenCV 形態(tài)學變換的實現(xiàn)示例的文章就介紹到這了,更多相關OpenCV 形態(tài)學變換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口
本文主要介紹了Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07pytorch中交叉熵損失(nn.CrossEntropyLoss())的計算過程詳解
今天小編就為大家分享一篇pytorch中交叉熵損失(nn.CrossEntropyLoss())的計算過程詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01selenium攜帶cookies模擬登陸CSDN的實現(xiàn)
這篇文章主要介紹了selenium攜帶cookies模擬登陸CSDN的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01