[OpenCV基礎][Python]邊緣偵測Sobel、Scharr、Laplacian、 Canny

更新於 發佈於 閱讀時間約 5 分鐘

OpenCV 提供了多種用於邊緣偵測的方法,其中一些常見的包括 Sobel、Scharr、Laplacian,還有 Canny 邊緣檢測器。這些方法可以幫助我們檢測圖像中的暗明強度變化,從而找到物體的邊緣

以下方法,都需輸入灰階圖片。


邊緣偵測方法:

Sobel 運算子:

Sobel 運算子用於計算圖像的梯度,尤其是水平方向和垂直方向的梯度。在這個例子中,分別計算了 x 方向 y 方向Sobel 梯度

Sobel 運算子使用 3x3 的核,其中水平和垂直方向的權重分佈如下:

Sobel_X:
[ -1 0 1 ]
[ -2 0 2 ]
[ -1 0 1 ]

Sobel_Y:
[ 1 2 1 ]
[ 0 0 0 ]
[ -1 -2 -1 ]

語法

# Sobel 運算子
sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)

cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3): 計算 x 方向的 Sobel 梯度。
cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3): 計算 y 方向的 Sobel 梯度。
ksize 參數指定了 Sobel 核的大小,這裡是 3x3 的核。
cv2.CV_64F 確保了輸出梯度的數據類型是 64 位浮點數。

示範圖

sobel

sobel


Scharr 運算子:

Scharr 運算子也用於計算圖像的梯度,和 Sobel 類似,但其核的權重分佈更均勻,能夠提供更平滑的梯度估計。

水平和垂直方向的權重分佈如下:

Scharr_X:
[ -3 0 3 ]
[ -10 0 10 ]
[ -3 0 3 ]

Scharr_Y:
[ 3 10 3 ]
[ 0 0 0 ]
[ -3 -10 -3 ]

語法

# Scharr 運算子
scharr_x = cv2.Scharr(img, cv2.CV_64F, 1, 0)
scharr_y = cv2.Scharr(img, cv2.CV_64F, 0, 1)

img: 輸入的灰度圖像。
cv2.CV_64F: 輸出圖像的深度,通常使用 64 位浮點數以確保梯度的準確性。
10: 分別表示計算 x 方向和 y 方向的梯度。

示範圖

Scharr 與 Sobel X軸的比較

Scharr 與 Sobel X軸的比較

Scharr 與 Sobel Y軸的比較

Scharr 與 Sobel Y軸的比較


Laplacian 運算子

Laplacian 運算子用於計算圖像的二次導數,它可以提取圖像中的輪廓和邊緣信息。這是一種常用的邊緣檢測方法。

語法:

laplacian = cv2.Laplacian(img, cv2.CV_64F, ksize=3)

img: 輸入的灰度圖像。
cv2.CV_64F: 輸出圖像的深度,通常使用 64 位浮點數。
ksize 參數指定了 Laplacian 核的大小,這裡是 3x3 的核。

Laplacian 運算子對圖像中的高頻信息進行了增強,強調了邊緣和細節。

Laplacian

Laplacian


Canny 邊緣檢測器

Canny 邊緣檢測是一種綜合了多個步驟的強大方法,包括高斯模糊計算梯度非極大值抑制雙閾值檢測。它可以在圖像中檢測到細緻的邊緣

語法:

edges = cv2.Canny(img, threshold1, threshold2)

img: 輸入的灰度圖像。
threshold1threshold2: 雙閾值檢測的兩個閾值,用於區分強邊緣、弱邊緣和非邊緣點。

Canny 邊緣檢測在一個連續的操作中完成多個步驟,包括平滑、梯度計算、非極大值抑制和邊緣連接。它能夠產生高質量的邊緣檢測結果,並且可以通過調整閾值進行對結果的細化。

Canny

Canny


邊緣偵測算法的優缺點總結:

Canny 邊緣檢測:

優點:
高準確性: 提供準確的邊緣檢測結果。
低誤報率: 雙閾值檢測可控制強弱邊緣,減少誤報。
平滑效果: 使用高斯平滑有助於去除噪聲

缺點:
複雜度: 實現較複雜,需要調整參數
計算量大: 計算量相對較大。

Sobel 運算子:

優點:
簡單: 實現簡單,易於應用。
適用於清晰圖像: 在清晰圖像中,能有效提取邊緣。

缺點:
對噪聲敏感: 在噪聲多的情況下容易受到干擾。
缺乏方向性: 只提供垂直和水平方向梯度。

Laplacian 運算子:

優點:
提取細節: 能提取圖像中的細節和高頻信息。
無方向性: 不受方向性限制,能檢測多方向邊緣。

缺點:
對噪聲敏感: 容易受到噪聲的干擾。
誤報: 可能產生一些不必要的誤報,特別在有噪聲的圖像中。











avatar-img
134會員
220內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
在生活中常看到的美圖秀秀或美圖修修或者其他圖像編輯軟體,通常使用各種濾波器和模糊化技術來實現照片的修飾和美化效果。這些濾波和模糊化技術可以應用於不同的區域,以改進照片的外觀,包括平滑皮膚、去除細節、調整對比度等。 本文會介紹 OpenCV 四種影像模糊化的方法
在影像處理中,我們總是會想把圖像內一些物件的特徵讓它明顯一點,形態學運算就是一個好用強大的工具。 形態學運算是圖像處理中的一個重要概念,用於改善或改變圖像的形狀。在OpenCV中,形態學運算提供了一系列操作,包括開運算、閉運算、禮帽運算和黑帽運算。這些操作通常應用於二值圖像,用於去除噪聲、連接物體
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和影像處理庫,它提供了豐富的功能和工具,可用於開發各種視覺應用程式。 OpenCV最初是用C++編寫的,但它也提供了Python、Java等多種程式語言的接口,方便不同語言的開發者使用。
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
在生活中常看到的美圖秀秀或美圖修修或者其他圖像編輯軟體,通常使用各種濾波器和模糊化技術來實現照片的修飾和美化效果。這些濾波和模糊化技術可以應用於不同的區域,以改進照片的外觀,包括平滑皮膚、去除細節、調整對比度等。 本文會介紹 OpenCV 四種影像模糊化的方法
在影像處理中,我們總是會想把圖像內一些物件的特徵讓它明顯一點,形態學運算就是一個好用強大的工具。 形態學運算是圖像處理中的一個重要概念,用於改善或改變圖像的形狀。在OpenCV中,形態學運算提供了一系列操作,包括開運算、閉運算、禮帽運算和黑帽運算。這些操作通常應用於二值圖像,用於去除噪聲、連接物體
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和影像處理庫,它提供了豐富的功能和工具,可用於開發各種視覺應用程式。 OpenCV最初是用C++編寫的,但它也提供了Python、Java等多種程式語言的接口,方便不同語言的開發者使用。
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
你可能也想看
Google News 追蹤
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
使用 LBP(Local Binary Patterns) 進行紋理分析和瑕疵檢測 Local Binary Patterns(LBP) 是一種用來描述圖像紋理的特徵提取技術。LBP 對於檢測表面紋理的異常具有很好的效果,尤其在檢測紋理一致的材料表面(例如紡織品、紙張、金屬)時,LBP 非常有用。
Thumbnail
本篇文章主要講述cv2.connectedComponent應用於物件上的分割,將不同文字分割並用不同顏色標記。 範例程式結果圖 cv2.connectedComponentsWithStats 是 OpenCV 中用來執行連通元件標記的函式之一。
Thumbnail
伽瑪校正(Gamma correction)被視為影像增強的一種方法之一。 通過調整 gamma 值,可以改變圖像的亮度和對比度,從而使圖像更清晰或更具有視覺效果。 以下將利用cv2.LUT及numpy的組合實現伽瑪校正,及詳細介紹cv2.LUT 函式應用。
Thumbnail
warpAffine 和 warpPerspective 都是 OpenCV 中用於圖像變換的函數,主要差異在於這兩種函數所使用的變換矩陣的類型和適用場景。 本文主要討論warpAffine,另外warpPerspective可以此篇文章
Thumbnail
當我們在拍照時,有時候會期望圖像中物體是呈現我們想要的樣子,就可以利用透視變換的方式,將物體捏造成我們想要的樣子。 當我們拍攝文件或書籍時,如果有角度和距離的變化,文件可能會變形。透視變換可用於校正這種變形,使文件呈現平整的視覺效果。 cv2.warpPerspective
Thumbnail
歡迎來到「阿Han的軟體心法實戰營 - 影像處理」系列的文章區,我們會針對影像處理的相關知識、開發技巧進行分享,並教你手把手用程式寫出屬於自己的影像處理程式, 當然也會包括AI模型訓練的部分,就讓我們一起來探索影像處理的領域吧! 在進入影像辨識的世界之前, 我們先來了解一下關於解析度的基本概念吧!
Thumbnail
在樹莓派安裝OpenCV的紀錄。板子是樹莓派3B(沒有+),系統raspbian bullseye 32bit灌到USB隨身碟。
Thumbnail
#安裝 OpenCV 相關套件 pip install opencv-python pip install opencv-contrib-python pip install matplotlib
Haar Cascade classifier OpenCV 官方 Github:https://github.com/opencv/opencv/tree/4.x/data 人臉特徵模型:haarcascade_frontalface_default.xml 資料來源: https://steam
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
使用 LBP(Local Binary Patterns) 進行紋理分析和瑕疵檢測 Local Binary Patterns(LBP) 是一種用來描述圖像紋理的特徵提取技術。LBP 對於檢測表面紋理的異常具有很好的效果,尤其在檢測紋理一致的材料表面(例如紡織品、紙張、金屬)時,LBP 非常有用。
Thumbnail
本篇文章主要講述cv2.connectedComponent應用於物件上的分割,將不同文字分割並用不同顏色標記。 範例程式結果圖 cv2.connectedComponentsWithStats 是 OpenCV 中用來執行連通元件標記的函式之一。
Thumbnail
伽瑪校正(Gamma correction)被視為影像增強的一種方法之一。 通過調整 gamma 值,可以改變圖像的亮度和對比度,從而使圖像更清晰或更具有視覺效果。 以下將利用cv2.LUT及numpy的組合實現伽瑪校正,及詳細介紹cv2.LUT 函式應用。
Thumbnail
warpAffine 和 warpPerspective 都是 OpenCV 中用於圖像變換的函數,主要差異在於這兩種函數所使用的變換矩陣的類型和適用場景。 本文主要討論warpAffine,另外warpPerspective可以此篇文章
Thumbnail
當我們在拍照時,有時候會期望圖像中物體是呈現我們想要的樣子,就可以利用透視變換的方式,將物體捏造成我們想要的樣子。 當我們拍攝文件或書籍時,如果有角度和距離的變化,文件可能會變形。透視變換可用於校正這種變形,使文件呈現平整的視覺效果。 cv2.warpPerspective
Thumbnail
歡迎來到「阿Han的軟體心法實戰營 - 影像處理」系列的文章區,我們會針對影像處理的相關知識、開發技巧進行分享,並教你手把手用程式寫出屬於自己的影像處理程式, 當然也會包括AI模型訓練的部分,就讓我們一起來探索影像處理的領域吧! 在進入影像辨識的世界之前, 我們先來了解一下關於解析度的基本概念吧!
Thumbnail
在樹莓派安裝OpenCV的紀錄。板子是樹莓派3B(沒有+),系統raspbian bullseye 32bit灌到USB隨身碟。
Thumbnail
#安裝 OpenCV 相關套件 pip install opencv-python pip install opencv-contrib-python pip install matplotlib
Haar Cascade classifier OpenCV 官方 Github:https://github.com/opencv/opencv/tree/4.x/data 人臉特徵模型:haarcascade_frontalface_default.xml 資料來源: https://steam