OpenCV 形態(tài)學(xué)變換的實(shí)現(xiàn)示例
一、引言
在計(jì)算機(jī)視覺(jué)領(lǐng)域,形態(tài)學(xué)變換是一種基于圖像形狀的簡(jiǎn)單操作,常用于圖像預(yù)處理、特征提取等任務(wù)。OpenCV 作為一個(gè)強(qiáng)大的計(jì)算機(jī)視覺(jué)庫(kù),提供了豐富的形態(tài)學(xué)變換函數(shù)。本文將詳細(xì)介紹 OpenCV 中常見的形態(tài)學(xué)變換操作,并通過(guò) Python 代碼展示如何對(duì)一張貓咪圖像進(jìn)行這些操作。
二、環(huán)境準(zhǔn)備
在運(yùn)行代碼之前,你需要安裝 OpenCV 庫(kù)??梢允褂靡韵旅钸M(jìn)行安裝:
pip install opencv-python
三、代碼實(shí)現(xiàn)
1. 導(dǎo)入必要的庫(kù)
import cv2 import numpy as np
2. 腐蝕操作
腐蝕操作會(huì)使圖像中的前景物體變小,通常用于去除小的噪聲點(diǎn)。
二值圖腐蝕后白色像素(非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. 膨脹操作
膨脹操作會(huì)使圖像中的前景物體變大,通常用于連接斷裂的物體。
二值圖膨脹后白色像素變多了。
# 膨脹
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. 開運(yùn)算
開運(yùn)算先進(jìn)行腐蝕操作,再進(jìn)行膨脹操作,常用于去除小的前景物體。
# 開運(yùn)算:先腐蝕后膨脹
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. 閉運(yùn)算
閉運(yùn)算先進(jìn)行膨脹操作,再進(jìn)行腐蝕操作,常用于填充前景物體內(nèi)部的小孔。
# 閉運(yùn)算:先膨脹后腐蝕
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. 禮帽操作
禮帽操作是原始圖像與開運(yùn)算結(jié)果之差,常用于突出圖像中的噪聲點(diǎn)。
# 禮帽:原始圖像與開運(yùn)算之差
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. 黑帽操作
黑帽操作是閉運(yùn)算結(jié)果與原始圖像之差,常用于突出圖像中的小孔。
# 黑帽:閉運(yùn)算與原始圖像之差
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)入庫(kù):導(dǎo)入了
cv2和numpy庫(kù),cv2用于圖像處理,numpy用于創(chuàng)建核。 - 讀取圖像:使用
cv2.imread函數(shù)讀取貓咪圖像,并將其轉(zhuǎn)換為灰度圖像。 - 創(chuàng)建核:使用
np.ones函數(shù)創(chuàng)建一個(gè) 3x3 的核,用于形態(tài)學(xué)變換。 - 形態(tài)學(xué)變換:使用
cv2.erode、cv2.dilate和cv2.morphologyEx函數(shù)進(jìn)行不同的形態(tài)學(xué)變換。 - 顯示圖像:使用
cv2.imshow函數(shù)顯示原始圖像和變換后的圖像。 - 等待按鍵:使用
cv2.waitKey函數(shù)等待用戶按下任意鍵關(guān)閉窗口。
五、總結(jié)
通過(guò)本文的介紹,你學(xué)會(huì)了如何使用 OpenCV 進(jìn)行常見的形態(tài)學(xué)變換操作。這些操作在圖像預(yù)處理、特征提取等任務(wù)中非常有用。你可以根據(jù)自己的需求選擇合適的形態(tài)學(xué)變換操作,對(duì)圖像進(jìn)行處理。
到此這篇關(guān)于OpenCV 形態(tài)學(xué)變換的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)OpenCV 形態(tài)學(xué)變換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python requests和httpx實(shí)例詳解
這篇文章主要介紹了Python requests和httpx的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12
使用Python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
python3 tkinter實(shí)現(xiàn)點(diǎn)擊一個(gè)按鈕跳出另一個(gè)窗口的方法
今天小編就為大家分享一篇python3 tkinter實(shí)現(xiàn)點(diǎn)擊一個(gè)按鈕跳出另一個(gè)窗口的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
python 使用tkinter+you-get實(shí)現(xiàn)視頻下載器
這篇文章主要介紹了python 使用tkinter+you-get實(shí)現(xiàn)視頻下載器,幫助大家方便的下載視頻資源,感興趣的朋友可以了解下2020-11-11
python中必會(huì)的四大高級(jí)數(shù)據(jù)類型(字符,元組,列表,字典)
這篇文章主要介紹了python中必會(huì)的四大高級(jí)數(shù)據(jù)類型(字符,元組,列表,字典),本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05
詳細(xì)解析Python當(dāng)中的數(shù)據(jù)類型和變量
這篇文章主要介紹了Python當(dāng)中的數(shù)據(jù)類型和變量,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-04-04
python 百度aip實(shí)現(xiàn)文字識(shí)別的實(shí)現(xiàn)示例
百度aip將圖片或掃描件中的文字識(shí)別成可編輯的文本,本文主要介紹了python 百度aip實(shí)現(xiàn)文字識(shí)別,具有一定的參考價(jià)值,感興趣的可以了解一下2021-08-08
Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)圖像精靈下篇
相信大多數(shù)8090后都玩過(guò)太空射擊游戲,在過(guò)去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過(guò)往展望未來(lái),下面開始入門篇2022-08-08
keras和tensorflow使用fit_generator 批次訓(xùn)練操作
這篇文章主要介紹了keras和tensorflow使用fit_generator 批次訓(xùn)練操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
Python實(shí)現(xiàn)獲取內(nèi)網(wǎng)IP地址的方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了五種利用Python語(yǔ)言實(shí)現(xiàn)獲取內(nèi)網(wǎng)IP地址的方法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下2023-03-03

