python+opencv邊緣提取與各函數(shù)參數(shù)解析
前情提要:作為剛?cè)腴T機(jī)器視覺的小伙伴,第一節(jié)課學(xué)到機(jī)器視覺語(yǔ)法時(shí)覺得很難理解,
很多人家的經(jīng)驗(yàn),我發(fā)現(xiàn)都千篇一律,功能函數(shù)沒解析,參數(shù)不講解,就一個(gè)代碼,所以在此將搜集的解析和案例拿出來(lái)匯總??!!
一、opencv+python環(huán)境搭建
其實(shí)能寫python的就能寫opencv,但是工具很總要,代碼提示也很重要,你可能會(huì)用submit vs等工具,submit編碼個(gè)人覺得不夠智能,vs的話過(guò)完年我學(xué)的方向不一致,所以沒用
推薦 pycharm ,在項(xiàng)目setting中的項(xiàng)目解釋器中安裝 opencv-python 即可進(jìn)行編碼。python環(huán)境搭建也灰常方便。
二、邊緣提取案例
import cv2 def edge_demo(image): #GaussianBlur圖像高斯平滑處理 blurred = cv2.GaussianBlur(image, (3, 3), 0) #(3, 3)表示高斯矩陣的長(zhǎng)與寬都是3,意思就是每個(gè)像素點(diǎn)按3*3的矩陣在周圍取樣求平均值,,標(biāo)準(zhǔn)差取0 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #顏色模式轉(zhuǎn)換成cv2.COLOR_BGR2GRAY模式下的灰度圖像 edge_output = cv2.Canny(gray, 50, 150) #提取上一步中處理好的圖像邊緣,50和150分別代表低閾值和高閾值,高閾值用來(lái)將物體與背景區(qū)分開來(lái),低的用于平滑連接高閾值產(chǎn)生的片段,使圖像成一個(gè)整體 cv2.imshow("canny edge", edge_output)#輸出灰度圖像 #原圖與灰度圖像與運(yùn)算,按照灰度圖剪切加和的原圖 dst = cv2.bitwise_and(image, image, mask=edge_output) cv2.imshow("color edge", dst)#輸出帶顏色邊緣圖像 if __name__ == '__main__': img = cv2.imread("cat.jpg") # cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE) cv2.imshow("input image", img) edge_demo(img) cv2.waitKey(0)#等待鍵盤輸入,不輸入 則無(wú)限等待 cv2.destroyAllWindows()#清除所以窗口
三、解釋功能函數(shù)
其實(shí)上面的代碼也是用的別人的,但絕大多數(shù)都沒有解釋,對(duì)于像我這種新手不是很友好
高斯處理
圖像處理中,常用的濾波算法有均值濾波、中值濾波以及高斯濾波等。
三種濾波器的對(duì)比:
濾波器種類 基本原理 特點(diǎn)
均值濾波 使用模板內(nèi)所有像素的平均值代替模板中心像素灰度值 易收到噪聲的干擾,不能完全消除噪聲,只能相對(duì)減弱噪聲
中值濾波 計(jì)算模板內(nèi)所有像素中的中值,并用所計(jì)算出來(lái)的中值體改模板中心像素的灰度值 對(duì)噪聲不是那么敏感,能夠較好的消除椒鹽噪聲,但是容易導(dǎo)致圖像的不連續(xù)性
高斯濾波 對(duì)圖像鄰域內(nèi)像素進(jìn)行平滑時(shí),鄰域內(nèi)不同位置的像素被賦予不同的權(quán)值 對(duì)圖像進(jìn)行平滑的同時(shí),同時(shí)能夠更多的保留圖像的總體灰度分布特征
意思就是使你的圖像灰度分布更均勻,每個(gè)點(diǎn)的像素均為周圍 按3*3的矩陣在周圍取樣求平均值,,標(biāo)準(zhǔn)差取0來(lái)處
blurred = cv2.GaussianBlur(image, (3, 3), 0) #GaussianBlur圖像高斯平滑處理 #(3, 3)表示高斯矩陣的長(zhǎng)與寬都是3,意思就是每個(gè)像素點(diǎn)按3*3的矩陣在周圍取樣求平均值,,標(biāo)準(zhǔn)差取0
灰度轉(zhuǎn)換----》也叫做二值化處理
故名思意就是轉(zhuǎn)換成黑白圖像,后面的參數(shù)中 cv2.COLOR_BGR2GRAY 其實(shí)就是色彩模式,所以函數(shù)名為 cvtColor(色彩模式轉(zhuǎn)換)
cvtColor()用于將圖像從一個(gè)顏色空間轉(zhuǎn)換到另一個(gè)顏色空間的轉(zhuǎn)換(目前常見的顏色空間均支持),并且在轉(zhuǎn)換的過(guò)程中能夠保證數(shù)據(jù)的類型不變, 即轉(zhuǎn)換后的圖像的數(shù)據(jù)類型和位深與源圖像一致
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #顏色模式轉(zhuǎn)換成cv2.COLOR_BGR2GRAY模式下的灰度圖像
邊緣識(shí)別提取
這一步是將二值化后的圖像提取邊緣,50和150分別代表低閾值和高閾值,高閾值用來(lái)將物體與背景區(qū)分開來(lái),低的用于平滑連接高閾值產(chǎn)生的片段,使圖像成一個(gè)整體
簡(jiǎn)明而言就是,小的用于細(xì)小的地方處理,大的宏觀處理----》大閾值用于分離背景與輪廓,曉得用于拼接細(xì)小的輪廓,即可形成一個(gè)整體
edge_output = cv2.Canny(gray, 50, 150) #提取上一步中處理好的圖像邊緣,50和150分別代表低閾值和高閾值,高閾值用來(lái)將物體與背景區(qū)分開來(lái),低的用于平滑連接高閾值產(chǎn)生的片段,使圖像成一個(gè)整體
輸出即可,小面的函數(shù)只是對(duì)比學(xué)習(xí)而已,可以不用
(對(duì)于dst = cv2.bitwise_and(image, image, mask=edge_output) cv2.imshow("color edge", dst)#輸出帶顏色邊緣圖像
)
到此這篇關(guān)于python+opencv邊緣提取與各函數(shù)參數(shù)解析的文章就介紹到這了,更多相關(guān)python opencv邊緣提取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python按照行來(lái)讀取txt文件全部?jī)?nèi)容(去除空行處理掉\t,\n后以列表方式返回)
這篇文章主要介紹了python按照行來(lái)讀取txt文件全部?jī)?nèi)容 ,去除空行,處理掉\t,\n后,以列表方式返回,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06python判斷所輸入的任意一個(gè)正整數(shù)是否為素?cái)?shù)的兩種方法
今天小編就為大家分享一篇python判斷所輸入的任意一個(gè)正整數(shù)是否為素?cái)?shù)的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python高階函數(shù)之filter()函數(shù)代碼示例
這篇文章主要介紹了Python高階函數(shù)之filter()函數(shù)代碼示例,獲取了一個(gè)序列的時(shí)候,想要把一些內(nèi)容去掉,保留一部分內(nèi)容的時(shí)候可以使用高效的filter()函數(shù),需要的朋友可以參考下2023-07-07教女朋友學(xué)Python3(二)簡(jiǎn)單的輸入輸出及內(nèi)置函數(shù)查看
這篇文章主要介紹了教女朋友學(xué)Python3(二)簡(jiǎn)單的輸入輸出及內(nèi)置函數(shù)查看,涉及Python3簡(jiǎn)單的輸入輸出功能實(shí)現(xiàn),以及參看內(nèi)置函數(shù)的功能和用法描述的語(yǔ)句,具有一定參考價(jià)值,需要的朋友可了解下。2017-11-11python3.5 + PyQt5 +Eric6 實(shí)現(xiàn)的一個(gè)計(jì)算器代碼
這篇文章主要介紹了python3.5 + PyQt5 +Eric6 實(shí)現(xiàn)的一個(gè)計(jì)算器代碼,在windows7 32位系統(tǒng)可以完美運(yùn)行 計(jì)算器,有興趣的可以了解一下。2017-03-03Django掃碼抽獎(jiǎng)平臺(tái)的配置過(guò)程詳解
這篇文章主要介紹了Django掃碼抽獎(jiǎng)平臺(tái),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01django框架配置swagger以及自定義參數(shù)使用方式
這篇文章主要介紹了django框架配置swagger以及自定義參數(shù)使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Python大數(shù)據(jù)量文本文件高效解析方案代碼實(shí)現(xiàn)全過(guò)程
在數(shù)據(jù)分析中,有時(shí)數(shù)據(jù)源會(huì)是超大的文本文件(幾G,或在幾十G),需要從中提取需要的信息,下面這篇文章主要給大家介紹了關(guān)于Python大數(shù)據(jù)量文本文件高效解析方案代碼實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-12-12django框架實(shí)現(xiàn)一次性上傳多個(gè)文件功能示例【批量上傳】
這篇文章主要介紹了django框架實(shí)現(xiàn)一次性上傳多個(gè)文件功能,結(jié)合實(shí)例形式分析了Django框架批量上傳相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-06-06python 解決flask uwsgi 獲取不到全局變量的問題
今天小編就為大家分享一篇python 解決flask uwsgi 獲取不到全局變量的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12