Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

發表於2016-05-30

系列文章目錄

關於邊緣檢測的基礎來自於一個事實,即在邊緣部分,畫素值出現”跳躍“或者較大的變化。如果在此邊緣部分求取一階導數,就會看到極值的出現。

而在一階導數為極值的地方,二階導數為0,基於這個原理,就可以進行邊緣檢測。

關於 Laplace 演算法原理,可參考

0x01. Laplace 演算法

下面的程式碼展示了分別對灰度化的影象和原始彩色影象中的邊緣進行檢測:

效果展示

原圖

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

灰度化圖片檢測

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

原始彩色圖片檢測

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

0x02. Sobel 演算法

Sobel 也是很常用的一種輪廓識別的演算法。

關於 Sobel 導數原理的介紹,可參考

以下是使用 Sobel 演算法進行輪廓檢測的程式碼和效果

處理之後效果圖(感覺比Laplace效果要好些)

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

0x03. cv.MorphologyEx

cv.MorphologyEx 是另外一種邊緣檢測的演算法

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

0x04. Canny 邊緣檢測

Canny 演算法可以對直線邊界做出很好的檢測;

關於 Canny 演算法原理的描述,可參考:

原圖

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

使用 Canny 演算法處理之後

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

標記出標準的直線

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

標記出所有可能的直線

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

0x05. 輪廓檢測

OpenCV 提供一個 FindContours 函式可以用來檢測出影象中物件的輪廓:

效果圖:

原圖

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

識別結果

Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測

0x06. 邊界檢測

相關文章