python+opencv入門-canny 邊緣檢測
任務描述
參考文章
https://www.educoder.net/shixuns/2pwliuxy/challenges
本關任務:使用 OpenCV 實現圖片邊緣檢測方法,並對圖片進行邊緣檢測。
相關知識
爲了完成本關任務,你需要掌握:
1 . 什麼是邊緣檢測;
2 . 使用 OpenCV 實現圖片邊緣檢測方法。
什麼是邊緣檢測
邊緣檢測是圖像處理和計算機視覺中的基本問題,邊緣檢測的目的是標識數字圖像中亮度變化明顯的點。圖像邊緣檢測大幅度地減少了數據量,並且剔除了可以認爲不相關的信息,保留了圖像重要的結構屬性。圖像屬性中的顯著變化通常反映了屬性的重要事件和變化。如下圖:
常用的邊緣檢測模板有 Laplacian 算子、Roberts 算子、Sobel 算子、 Kirsch 算子和 Prewitt 算子等。在這裏簡單介紹下 canny 邊緣檢測,大概分爲以下五個步驟:
1.使用高斯濾波器,以平滑圖像,濾除噪聲。
2.計算圖像中每個像素點的梯度強度和方向。
3.應用非極大值(Non-Maximum Suppression)抑制,以消除邊緣檢測帶來的雜散響應。
4.應用雙閾值(Double-Threshold)檢測來確定真實的和潛在的邊緣。
5.通過抑制孤立的弱邊緣最終完成邊緣檢測。
使用OpenCV實現圖片邊緣檢測方法
import cv2
#加載灰度圖片
img = cv2.imread(img_path,0)
#進行canny邊緣檢測
canny_edg=cv2.Canny(img,50,150)
#保存處理後的圖片
cv2.imwrite(save_path,canny_edg)
其中 cv2.imread() 爲加載圖片方法,0 表示加載灰度圖片。cv2.Canny() 爲 canny 邊緣檢測方法,img 爲所檢測圖片。
最後將處理後的圖片保存,save_path 爲保存路徑。
編程要求
根據提示,在右側編輯器的 begin-end 間補充代碼,實現邊緣檢測方法,並對圖片進行邊緣檢測。
測試說明
程序會使用你實現的方法對圖片進行邊緣檢測,若檢測結果與正確結果差異在閾值內則視爲通關。
#encoding=utf8
import cv2
def canny_edg(img_path,save_path):
''' img_path:圖片儲存路徑
save_path:圖片保存路徑
img:處理後的圖片 '''
#********* Begin *********#
#加載灰度圖片
img = cv2.imread(img_path,0)
#進行canny邊緣檢測
#補全代碼!!
#保存處理後的圖片
cv2.imwrite(save_path,canny_edg)
#********* End *********#
return img
+++++++++++++++++++++++++answer++++++++++++++++++++++++++++++++