您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關opencv python Canny邊緣提取的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
這篇文章主要介紹了opencv python Canny邊緣提取實現過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Canny是邊緣提取算法,在1986年提出的是一個很好的邊緣檢測器Canny算法介紹
非最大信號抑制:
高低閾值連接:
example
import cv2 as cv import numpy as np # canny運算步驟:5步 # 1. 高斯模糊 - GaussianBlur # 2. 灰度轉換 - cvtColor # 3. 計算梯度 - Sobel/Scharr # 4. 非極大值抑制 # 5. 高低閾值輸出二值圖像 # 非極大值抑制: # 算法使用一個3×3鄰域作用在幅值陣列M[i,j]的所有點上; # 每一個點上,鄰域的中心像素M[i,j]與沿著梯度線的兩個元素進行比較, # 其中梯度線是由鄰域的中心點處的扇區值ζ[i,j]給出。 # 如果在鄰域中心點處的幅值M[i,j]不比梯度線方向上的兩個相鄰點幅值大,則M[i,j]賦值為零,否則維持原值; # 此過程可以把M[i,j]寬屋脊帶細化成只有一個像素點寬,即保留屋脊的高度值。 # 高低閾值連接 # T1,T2為閾值,凡是高于T2的都保留,凡是低于T1的都丟棄 # 從高于T2的像素出發,凡是大于T1而且相互連接的都保留。最終得到一個輸出二值圖像 # 推薦高低閾值比值為T2:T1 = 3:1/2:1,其中T2高閾值,T1低閾值 def edge_demo(image): blurred = cv.GaussianBlur(image, (3, 3), 0) gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY) grad_x = cv.Sobel(gray, cv.CV_16SC1, 1, 0) grad_y = cv.Sobel(gray, cv.CV_16SC1, 0, 1) # edge_output = cv.Canny(grad_x, grad_y, 30, 150) edge_output = cv.Canny(gray, 50, 150) cv.imshow("gray", gray) cv.imshow("Canny demo", edge_output) def main(): src = cv.imread("../images/Crystal.jpg") cv.imshow("demo",src) edge_demo(src) cv.waitKey(0) # 等有鍵輸入或者1000ms后自動將窗口消除,0表示只用鍵輸入結束窗口 cv.destroyAllWindows() # 關閉所有窗口 if __name__ == '__main__': main()
感謝各位的閱讀!關于“opencv python Canny邊緣提取的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。