python+opencv邊緣提取與各函式引數解析
前情提要:作為剛入門機器視覺的小夥伴,第一節課學到機器視覺語法時覺得很難理解,
很多人家的經驗,我發現都千篇一律,功能函式沒解析,引數不講解,就一個程式碼,所以在此將蒐集的解析和案例拿出來彙總!!!
一、opencv+python環境搭建
其實能寫python的就能寫opencv,但是工具很總要,程式碼提示也很重要,你可能會用submit vs等工具,submit編碼個人覺得不夠智慧,vs的話過完年我學的方向不一致,所以沒用
推薦 pycharm,在專案setting中的專案直譯器中安裝 opencv-python 即可進行編碼。python環境搭建也灰常方便。
二、邊緣提取案例
import cv2 def edge_demo(image): #GaussianBlur影象高斯平滑處理 blurred = cv2.GaussianBlur(image,(3,3),0) #(3,3)表示高斯矩陣的長與寬都是3,意思就是每個畫素點按3*3的矩陣在周圍取樣求平均值,,標準差取0 gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #顏色模式轉換成cv2.COLOR_BGR2GRAY模式下的灰度影象 edge_output = cv2.Canny(gray,50,150) #提取上一步中處理好的影象邊緣,50和150分別代表低閾值和高閾值,高閾值用來將物體與背景區分開來,低的用於平滑連線高閾值產生的片段,使影象成一個整體 cv2.imshow("canny edge",edge_output)#輸出灰度影象 #原圖與灰度影象與運算,按照灰度圖剪下加和的原圖 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)#等待鍵盤輸入,不輸入 則無限等待 cv2.destroyAllWindows()#清除所以視窗
三、解釋功能函式
其實上面的程式碼也是用的別人的,但絕大多數都沒有解釋,對於像我這種新手不是很友好
高斯處理
影象處理中,常用的濾波演算法有均值濾波、中值濾波以及高斯濾波等。
三種濾波器的對比:
濾波器種類 基本原理 特點
均值濾波 使用模板內所有畫素的平均值代替模板中心畫素灰度值 易收到噪聲的干擾,不能完全消除噪聲,只能相對減弱噪聲
中值濾波 計算模板內所有畫素中的中值,並用所計算出來的中值體改模板中心畫素的灰度值 對噪聲不是那麼敏感,能夠較好的消除椒鹽噪聲,但是容易導致影象的不連續性
高斯濾波 對影象鄰域內畫素進行平滑時,鄰域內不同位置的畫素被賦予不同的權值 對影象進行平滑的同時,同時能夠更多的保留影象的總體灰度分佈特徵
意思就是使你的影象灰度分佈更均勻,每個點的畫素均為周圍 按3*3的矩陣在周圍取樣求平均值,,標準差取0來處
blurred = cv2.GaussianBlur(image,0) #GaussianBlur影象高斯平滑處理 #(3,意思就是每個畫素點按3*3的矩陣在周圍取樣求平均值,,標準差取0
灰度轉換----》也叫做二值化處理
故名思意就是轉換成黑白影象,後面的引數中 cv2.COLOR_BGR2GRAY 其實就是色彩模式,所以函式名為cvtColor(色彩模式轉換)
cvtColor()用於將影象從一個顏色空間轉換到另一個顏色空間的轉換(目前常見的顏色空間均支援),並且在轉換的過程中能夠保證資料的型別不變, 即轉換後的影象的資料型別和位深與源影象一致
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #顏色模式轉換成cv2.COLOR_BGR2GRAY模式下的灰度影象
邊緣識別提取
這一步是將二值化後的影象提取邊緣,50和150分別代表低閾值和高閾值,高閾值用來將物體與背景區分開來,低的用於平滑連線高閾值產生的片段,使影象成一個整體
簡明而言就是,小的用於細小的地方處理,大的巨集觀處理----》大閾值用於分離背景與輪廓,曉得用於拼接細小的輪廓,即可形成一個整體
edge_output = cv2.Canny(gray,150) #提取上一步中處理好的影象邊緣,50和150分別代表低閾值和高閾值,高閾值用來將物體與背景區分開來,低的用於平滑連線高閾值產生的片段,使影象成一個整體
輸出即可,小面的函式只是對比學習而已,可以不用
(對於dst = cv2.bitwise_and(image,mask=edge_output) cv2.imshow("color edge",dst)#輸出帶顏色邊緣影象
)
到此這篇關於python+opencv邊緣提取與各函式引數解析的文章就介紹到這了,更多相關python opencv邊緣提取內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!