OpenCV 形態(tài)學(xué)變換的實現(xiàn)示例
一、引言
在計算機視覺領(lǐng)域,形態(tài)學(xué)變換是一種基于圖像形狀的簡單操作,常用于圖像預(yù)處理、特征提取等任務(wù)。OpenCV 作為一個強大的計算機視覺庫,提供了豐富的形態(tài)學(xué)變換函數(shù)。本文將詳細介紹 OpenCV 中常見的形態(tài)學(xué)變換操作,并通過 Python 代碼展示如何對一張貓咪圖像進行這些操作。
二、環(huán)境準備
在運行代碼之前,你需要安裝 OpenCV 庫。可以使用以下命令進行安裝:
pip install opencv-python
三、代碼實現(xiàn)
1. 導(dǎo)入必要的庫
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. 閉運算
閉運算先進行膨脹操作,再進行腐蝕操作,常用于填充前景物體內(nèi)部的小孔。
# 閉運算:先膨脹后腐蝕
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. 禮帽操作
禮帽操作是原始圖像與開運算結(jié)果之差,常用于突出圖像中的噪聲點。
# 禮帽:原始圖像與開運算之差
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. 黑帽操作
黑帽操作是閉運算結(jié)果與原始圖像之差,常用于突出圖像中的小孔。
# 黑帽:閉運算與原始圖像之差
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)學(xué)梯度操作
形態(tài)學(xué)梯度操作是膨脹結(jié)果與腐蝕結(jié)果之差,常用于突出圖像的邊緣。
# 形態(tài)學(xué)梯度:膨脹與腐蝕之差
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ù)調(diào)用
if __name__ == '__main__':
# test001()
# test002()
# test003()
# test004()
# test005()
# test006()
test007()四、代碼解釋
- 導(dǎo)入庫:導(dǎo)入了
cv2和numpy庫,cv2用于圖像處理,numpy用于創(chuàng)建核。 - 讀取圖像:使用
cv2.imread函數(shù)讀取貓咪圖像,并將其轉(zhuǎn)換為灰度圖像。 - 創(chuàng)建核:使用
np.ones函數(shù)創(chuàng)建一個 3x3 的核,用于形態(tài)學(xué)變換。 - 形態(tài)學(xué)變換:使用
cv2.erode、cv2.dilate和cv2.morphologyEx函數(shù)進行不同的形態(tài)學(xué)變換。 - 顯示圖像:使用
cv2.imshow函數(shù)顯示原始圖像和變換后的圖像。 - 等待按鍵:使用
cv2.waitKey函數(shù)等待用戶按下任意鍵關(guān)閉窗口。
五、總結(jié)
通過本文的介紹,你學(xué)會了如何使用 OpenCV 進行常見的形態(tài)學(xué)變換操作。這些操作在圖像預(yù)處理、特征提取等任務(wù)中非常有用。你可以根據(jù)自己的需求選擇合適的形態(tài)學(xué)變換操作,對圖像進行處理。
到此這篇關(guān)于OpenCV 形態(tài)學(xué)變換的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)OpenCV 形態(tài)學(xué)變換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口
本文主要介紹了Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
pytorch中交叉熵損失(nn.CrossEntropyLoss())的計算過程詳解
今天小編就為大家分享一篇pytorch中交叉熵損失(nn.CrossEntropyLoss())的計算過程詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
python數(shù)組復(fù)制拷貝的實現(xiàn)方法
這篇文章主要介紹了python數(shù)組復(fù)制拷貝的實現(xiàn)方法,實例分析了Python數(shù)組傳地址與傳值兩種復(fù)制拷貝的使用技巧,需要的朋友可以參考下2015-06-06
python中復(fù)數(shù)的共軛復(fù)數(shù)知識點總結(jié)
在本篇內(nèi)容里小編給大家整理的是關(guān)于python中復(fù)數(shù)的共軛復(fù)數(shù)知識點總結(jié),有需要的朋友們可以學(xué)習(xí)下。2020-12-12
selenium攜帶cookies模擬登陸CSDN的實現(xiàn)
這篇文章主要介紹了selenium攜帶cookies模擬登陸CSDN的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

