[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 運算子:

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

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











119會員
200內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_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
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
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
OpenCV 讀取圖片 原碼:https://reurl.cc/3354ZL 成果: OpenCV 本身有提供讀取圖檔的函數可用,讀取圖檔,只要呼叫 cv2.imread 即可將圖片讀取進來,以 cv2.imread 讀進來的資料,會儲存成一個 NumPy 的陣列。 將圖片讀取進來之後,可使用 c
opencv is use BGR color matplotlib is use RGB color 顯示圖片 opencv matplotlib
Thumbnail
OpenCart 官方的 3.0.3.7 版於上周釋出,除了修正許多 3.0.x 版累積的小問題,也更新了 twig 套件解決了 PHP 7.4 的相容問題,所以 OpenCart 台灣電商技術團隊,也以 OpenCart 3.0.3.7 版為基礎,加上了在地優化及實用模組,推出台灣優化版。
Thumbnail
綠界科技雖然為 OpenCart 電商系統推出了可直接安裝使用的金流擴充模組,但其設計的模組架構,並不算完全符合 OpenCart 金流模組的架構規則,包含後臺編輯不同付款方式時的設定,無法獨立分開設定,前台的金流選擇,更是被設計成兩段式的模式,非常不符合台灣消費者慣用的習性。
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
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
OpenCV 讀取圖片 原碼:https://reurl.cc/3354ZL 成果: OpenCV 本身有提供讀取圖檔的函數可用,讀取圖檔,只要呼叫 cv2.imread 即可將圖片讀取進來,以 cv2.imread 讀進來的資料,會儲存成一個 NumPy 的陣列。 將圖片讀取進來之後,可使用 c
opencv is use BGR color matplotlib is use RGB color 顯示圖片 opencv matplotlib
Thumbnail
OpenCart 官方的 3.0.3.7 版於上周釋出,除了修正許多 3.0.x 版累積的小問題,也更新了 twig 套件解決了 PHP 7.4 的相容問題,所以 OpenCart 台灣電商技術團隊,也以 OpenCart 3.0.3.7 版為基礎,加上了在地優化及實用模組,推出台灣優化版。
Thumbnail
綠界科技雖然為 OpenCart 電商系統推出了可直接安裝使用的金流擴充模組,但其設計的模組架構,並不算完全符合 OpenCart 金流模組的架構規則,包含後臺編輯不同付款方式時的設定,無法獨立分開設定,前台的金流選擇,更是被設計成兩段式的模式,非常不符合台灣消費者慣用的習性。