當我們在用Python進行影像處理或影像辨識時,經常會出現需要辨識圖形輪廓的情況,特別是在寫動態辨識相關的應用時這種情形尤為常見,今天就來教大家如何用OpenCV進行圖形邊緣偵測。
OpenCV中對邊緣偵測有一個十分便利的函式―—cv2.Canny,可以繪出圖片的邊緣輪廓,但只有用於灰階圖片的時候效果比較明顯,所以在使用這個函式之前要記得先將彩色圖片轉成灰階圖。
import cv2
image = cv2.imread('image.jpg')
匯入圖片之後,用之前說過的cv2.cvtColor函式將圖片轉成灰階:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
cv2.GaussianBlur是OpenCV用於將圖片平滑、模糊化的函式,中文翻譯是高斯濾波,之後的章節會深入講解。
canny = cv2.Canny(blurred, 30, 150)
cv2.Canny的基本參數分別為灰階圖片,最小門檻值和最大門檻值,只有色調在門檻內的灰階像素能被辨識為圖片邊緣,門檻值可自行定義。
設定完參數之後,把原始圖片和轉換完的圖片印出來看看吧:
cv2.imshow('color', image)
cv2.imshow('Result', canny)
cv2.waitKey(0)
是不是很神奇呢!只要短短幾行程式碼就能夠把圖片的邊緣大致抓出來,大大減少了我們的工作量!