python 邊緣與輪廓檢測

更新於 發佈於 閱讀時間約 3 分鐘
要畫輪廓要先有邊緣檢測
邊緣檢測Edge detection是影像處理,幫助電腦可以抓取圖片中的物體,這項技術以檢查影像中各像素點的顏色變化來區分邊界,有邊緣之後,可以再從這些交錯的線條得到物體輪廓。
邊緣檢測 vs. 輪廓檢測
在圖像中有個容易搞混的概念,邊緣與輪廓的差異是什麼?
邊緣檢測:檢測圖像中像素的值有突然改變的地方。
輪廓檢測:檢測圖像中的物體邊界,也就像找出物體的邊界。
因此要知道有邊緣的地方不一定有邊界,有邊界的地方也不一定有邊緣。
邊緣檢測Edge detection
Python的opencv提供三種邊緣檢測的方法:Laplacian、Sobel、Canny,這三個技術都是利用灰階圖片,基於每個像素灰值的不同,利用不同物體在其邊界處會有明顯的邊緣特徵來檢測。
這三種方法可依技術原理分為兩種,以下為其餘補充事項。
Laplacian:對於圖片的雜訊相當敏感,因此通常會先將影像模糊化再做處理。
Sobel與Canny:這兩個方法擁有相同的底層技術,差異在於執行方式,Sobel以簡單的卷積過濾器偵測圖像上水平及縱向光度的改變,以加權平均方式計算各點的數值來決定邊緣。而Canny先將影像模糊化再進行非極大值抑制,因為Canny有先經過影像模糊化,故比較能處理影像雜訊問題。
編寫程式碼該注意事項
Laplacian
使用opencv中的Laplacian函式須指定輸出的影像浮點格式CV_64F,為什麼是使用64bits而非灰階的8bits呢?
因為Laplacian過程需進行black-to-white及white-to-black兩種轉換,在微分的梯度計算中black-to-white屬於正向的運算而white-to-black則是負向,灰階的8bits格式僅能儲存0-255的正值,因此必須使用64bits。
接下來須取其絕對值並轉為8bit的灰階資訊,這是一般在運行Laplacian運算時所建議的方法,網上的說法是此方式可保留所有的邊緣資訊:先轉出為64bit,再取絕對值轉為8bit。
Sobel
Sobel可以單獨針對X軸、Y軸、X與Y軸抓取其邊緣。
Canny
Canny 的邊緣檢測方法是先將影響模糊化去除不必要的資訊,再使用類似Sobel的方式取的XY軸邊緣。
Canny函式的第二與第三個參數是門檻參數,意指圖像的任一點像素,若其值大於threshold2,則認定它屬於邊緣像素,若小於threshold1則不為邊緣像素,介於兩者之間則由程式依其像素強度值運算後決定。
程式碼與實作效果
程式碼連結:https://gist.github.com/IvyQQQQQ/30e57cc081da76399c267d344a7b8dbb
輪廓檢測
使用上面的方法找出邊緣後,接下來便是確定輪廓。輪廓是一連串沒有間斷的點所組成的曲線。我們可借助opencv中的 cv2.findContours找到輪廓,利用cv2.boundingRect依照前面跑出的結果取出物體。圖像處理步驟如下:
程式碼與實作效果
程式碼連結:https://gist.github.com/IvyQQQQQ/e3dc2d7f69211fd5790fcf78bbd93905
參考連結
https://chtseng.wordpress.com/2016/12/05/opencv-edge-detection%E9%82%8A%E7%B7%A3%E5%81%B5%E6%B8%AC/
為什麼會看到廣告
avatar-img
10會員
17內容數
關於多益的單字整理、記憶方法、心路歷程、英文的基礎概念。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
薰魚的沙龍 的其他內容
編譯器與直譯器
物件導向的概念,以python程式為範例。
用python寫出應用筆電相機儲存照片。
編譯器與直譯器
物件導向的概念,以python程式為範例。
用python寫出應用筆電相機儲存照片。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
觀看本文將可以學習到如何利用Numpy求得物件的邊緣點,及算出物件的寬跟高。 有詳細的程式邏輯說明,及各函式用法說明。 綠點及紅點則是採樣到的邊界點,比較粗的點是偵測到的最大值 完整程式碼 import cv2 import numpy as np import matplotl
Thumbnail
在影像處理中,我們總是想要讓特徵更加明顯一點,可以使用銳利化的方式將特徵的邊緣增強,提升影像的細節,圖像銳利後就會有提升解析度的感覺。 拉普拉斯運算子是一種常用於影像增強的方法之一,特別是用於提高影像的邊緣和細節。 在OpenCV中,你可以使用cv2.Laplacian函數來應用拉普拉斯運算子。
Thumbnail
廢話不多說,先上成果圖。 成果圖 主要實現方法 1.灰階後利用cv2.Canny找物體的邊緣 2.找物件相對應的直線cv2.HoughLines 3.分類為橫向和垂直的直線角度,求得相對於物件的旋轉角度 4.根據算出的相對應旋轉角度將物件轉正
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
本文介紹如何使用OpenCV的分水嶺演算法來實作硬幣的影像分割。除了官方範例外,還加入取出分割後物件的中心點來標註的功能。透過二值化、距離圖、前景圖、分割背景圖等步驟,最後應用分水嶺演算法進行硬幣的分割。本文也提供程式範例及圖示逐步解析演算法。
Thumbnail
本文介紹OpenCV中的SimpleBlobDetector用於檢測斑點或圓,以及其與霍夫轉換找圓方法的差異。透過程式範例和解析,講解檢測到的關鍵點和設定參數,並整理SimpleBlobDetector與霍夫轉換的不同。最後,探討不同的應用場景和參數調整。
Thumbnail
大部分在求物件的寬度及高度,都會想到用OpenCV的findContours函式來做,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度 [OpenCV應用][Python]利用findContours找出物件邊界框求出寬度及高度 本文將用不同的方法,利用Numpy
Thumbnail
本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。 一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色,背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。 結果圖 從圖中綠色框
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
觀看本文將可以學習到如何利用Numpy求得物件的邊緣點,及算出物件的寬跟高。 有詳細的程式邏輯說明,及各函式用法說明。 綠點及紅點則是採樣到的邊界點,比較粗的點是偵測到的最大值 完整程式碼 import cv2 import numpy as np import matplotl
Thumbnail
在影像處理中,我們總是想要讓特徵更加明顯一點,可以使用銳利化的方式將特徵的邊緣增強,提升影像的細節,圖像銳利後就會有提升解析度的感覺。 拉普拉斯運算子是一種常用於影像增強的方法之一,特別是用於提高影像的邊緣和細節。 在OpenCV中,你可以使用cv2.Laplacian函數來應用拉普拉斯運算子。
Thumbnail
廢話不多說,先上成果圖。 成果圖 主要實現方法 1.灰階後利用cv2.Canny找物體的邊緣 2.找物件相對應的直線cv2.HoughLines 3.分類為橫向和垂直的直線角度,求得相對於物件的旋轉角度 4.根據算出的相對應旋轉角度將物件轉正
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
本文介紹如何使用OpenCV的分水嶺演算法來實作硬幣的影像分割。除了官方範例外,還加入取出分割後物件的中心點來標註的功能。透過二值化、距離圖、前景圖、分割背景圖等步驟,最後應用分水嶺演算法進行硬幣的分割。本文也提供程式範例及圖示逐步解析演算法。
Thumbnail
本文介紹OpenCV中的SimpleBlobDetector用於檢測斑點或圓,以及其與霍夫轉換找圓方法的差異。透過程式範例和解析,講解檢測到的關鍵點和設定參數,並整理SimpleBlobDetector與霍夫轉換的不同。最後,探討不同的應用場景和參數調整。
Thumbnail
大部分在求物件的寬度及高度,都會想到用OpenCV的findContours函式來做,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度 [OpenCV應用][Python]利用findContours找出物件邊界框求出寬度及高度 本文將用不同的方法,利用Numpy
Thumbnail
本文將利用OpenCV的findContours函式,從找到的輪廓中來計算物件的面積,周長,邊界框等屬性,從而得到物體的寬度與高度。 一般來說,我們在進行輪廓檢測時,會先進行圖像二值化,將對象轉換為白色,背景為黑色。這樣,在找到輪廓後,輪廓的點就會以白色表示,背景為黑色。 結果圖 從圖中綠色框
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉