python opencv實(shí)現(xiàn)圖像邊緣檢測(cè)
本文利用python opencv進(jìn)行圖像的邊緣檢測(cè),一般要經(jīng)過(guò)如下幾個(gè)步驟:
1、去噪
如cv2.GaussianBlur()等函數(shù);
2、計(jì)算圖像梯度
圖像梯度表達(dá)的是各個(gè)像素點(diǎn)之間,像素值大小的變化幅度大小,變化較大,則可以認(rèn)為是出于邊緣位置,最多可簡(jiǎn)化為如下形式:
3、非極大值抑制
在獲得梯度的方向和大小之后,應(yīng)該對(duì)整幅圖像做一個(gè)掃描,去除那些非邊界上的點(diǎn)。對(duì)每一個(gè)像素進(jìn)行檢查,看這個(gè)點(diǎn)的梯度是不是周?chē)哂邢嗤荻确较虻狞c(diǎn)中最大的。如下圖所示:
4、滯后閾值
現(xiàn)在要確定那些邊界才是真正的邊界。這時(shí)我們需要設(shè)置兩個(gè)閾值:minVal 和maxVal。當(dāng)圖像的灰度梯度高于maxVal 時(shí)被認(rèn)為是真的邊界,那些低于minVal 的邊界會(huì)被拋棄。如果介于兩者之間的話,就要看這個(gè)點(diǎn)是否與某個(gè)被確定為真正的邊界點(diǎn)相連,如果是就認(rèn)為它也是邊界點(diǎn),如果不是就拋棄。如下圖:
在Python Opencv接口中,提供了Canny函數(shù),可以對(duì)圖像進(jìn)行一鍵執(zhí)行邊緣檢測(cè)。
接下來(lái),利用Canny函數(shù)進(jìn)行邊緣檢測(cè)的實(shí)驗(yàn)。
Canny函數(shù)需要指定幾個(gè)參數(shù):
1、需要進(jìn)行邊緣檢測(cè)的原圖
2、閾值下限
3、閾值上限
我們?yōu)榱四軌蚩吹讲煌撝捣秶鷮?duì)邊緣檢測(cè)結(jié)果的影響,設(shè)置了兩個(gè)滑動(dòng)條,來(lái)分別表示閾值上下限。
完整代碼如下:
# -*- coding: utf-8 -*- """ Created on Thu Sep 13 14:23:32 2018 @author: Leon 內(nèi)容: 對(duì)圖片進(jìn)行邊緣檢測(cè); 添加滑動(dòng)條,可自由調(diào)整閾值上下限。 """ import cv2 import numpy as np def nothing(x): pass cv2.namedWindow('Canny',0) # 創(chuàng)建滑動(dòng)條 cv2.createTrackbar('minval','Canny',0,255,nothing) cv2.createTrackbar('maxval','Canny',0,255,nothing) img = cv2.imread('Tree.jpg',0) # 高斯濾波去噪 img = cv2.GaussianBlur(img,(3,3),0) edges =img k=0 while(1): key = cv2.waitKey(50) & 0xFF if key == ord('q'): break # 讀取滑動(dòng)條數(shù)值 minval = cv2.getTrackbarPos('minval','Canny') maxval = cv2.getTrackbarPos('maxval','Canny') edges = cv2.Canny(img,minval,maxval) # 拼接原圖與邊緣監(jiān)測(cè)結(jié)果圖 img_2 = np.hstack((img,edges)) cv2.imshow('Canny',img_2) cv2.destroyAllWindows()
效果如圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python自動(dòng)化運(yùn)維之Telnetlib的具體使用
本文將結(jié)合實(shí)例代碼,介紹python自動(dòng)化運(yùn)維之Telnetlib的具體使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06python創(chuàng)建生成器以及訪問(wèn)的方法詳解
這篇文章主要介紹了python創(chuàng)建生成器以及訪問(wèn)的方法詳解,與列表一次性地將數(shù)據(jù)全都加載到內(nèi)存不同的是,生成器使用推斷加載數(shù)據(jù),每次只推斷出一個(gè)對(duì)象,在數(shù)據(jù)量比較大時(shí),可以節(jié)省內(nèi)存,需要的朋友可以參考下2023-11-11Python函數(shù)式編程藝術(shù)之修飾器運(yùn)用場(chǎng)景探索
本文將詳細(xì)介紹Python修飾器的概念,提供詳細(xì)的示例,并介紹如何使用它們來(lái)優(yōu)化和擴(kuò)展代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11對(duì)python while循環(huán)和雙重循環(huán)的實(shí)例詳解
今天小編就為大家分享一篇對(duì)python while循環(huán)和雙重循環(huán)的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python對(duì)多屬性的重復(fù)數(shù)據(jù)去重實(shí)例
下面小編就為大家分享一篇Python對(duì)多屬性的重復(fù)數(shù)據(jù)去重實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python開(kāi)發(fā)游戲之井字游戲的實(shí)戰(zhàn)步驟
最近正在學(xué)習(xí)Python,所以最近做了一個(gè)關(guān)于Python的實(shí)例,下面這篇文章主要給大家介紹了關(guān)于Python開(kāi)發(fā)游戲之井字游戲的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02如何使用pyinstaller打包時(shí)引入自己編寫(xiě)的庫(kù)
這篇文章主要介紹了如何使用pyinstaller打包時(shí)引入自己編寫(xiě)的庫(kù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02python使用append合并兩個(gè)數(shù)組的方法
這篇文章主要介紹了python使用append合并兩個(gè)數(shù)組的方法,涉及Python中append方法的使用技巧,需要的朋友可以參考下2015-04-04Django實(shí)現(xiàn)跨域請(qǐng)求過(guò)程詳解
這篇文章主要介紹了Django實(shí)現(xiàn)跨域請(qǐng)求過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07python實(shí)現(xiàn)在pickling的時(shí)候壓縮的方法
這篇文章主要介紹了python實(shí)現(xiàn)在pickling的時(shí)候壓縮的方法,比較具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09