(純新手教學)計算機視覺(opencv)實戰八——四種邊緣檢測詳解:Sobel、Scharr、Laplacian、Canny


邊緣檢測詳解:Sobel、Scharr、Laplacian、Canny

邊緣檢測是圖像處理和計算機視覺中的重要步驟,主要用于發現圖像中亮度變化劇烈的區域,即物體的輪廓、邊界或紋理特征。OpenCV 提供了多種常用的邊緣檢測算子,本教程將通過四種方法帶大家詳細學習:Sobel、Scharr、Laplacian、Canny


圖片準備:

可直接使用下圖,也可自備圖片

以下所有處理后的結果:

一、Sobel 算子

1. 原理

Sobel 算子本質上是 一階導數算子,通過對圖像在 x方向和y方向 上分別求導,檢測像素灰度變化最明顯的部分。

  • dx=1, dy=0:只檢測水平方向(垂直邊緣)。

  • dx=0, dy=1:只檢測垂直方向(水平邊緣)。

  • 將兩者結合,可以得到完整的邊緣信息。

2. 函數原型

cv2.Sobel(src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType]]]])

參數說明:

  • src:輸入圖像,可以是灰度圖或彩色圖。

  • ddepth:輸出圖像的深度,常用 cv2.CV_64F 保存負數梯度信息。

  • dx, dy:求導方向,dx=1 表示對x方向求導,dy=1 表示對y方向求導。

  • ksize:卷積核大小,常用3或5,必須為奇數。

參數說明
src輸入圖像,可以是灰度圖或彩色圖。
ddepth輸出圖像的深度(如 cv2.CV_64F 保留負值,-1 表示與原圖一致)。
dxx方向導數階數(1 表示對x方向求導)。
dyy方向導數階數(1 表示對y方向求導)。
ksize卷積核大小(必須為奇數,常用 3、5、7)。
scale縮放因子,默認 1。
delta偏移量,默認 0。
borderType邊界模式,默認 cv2.BORDER_DEFAULT

3. 示例代碼

import cv2
img = cv2.imread('violet.jpg', flags=0)#不用灰度試試效果
img = cv2.resize(img,(800,500))
cv2.imshow('img',img)
cv2.waitKey(0)img_x_64 = cv2.Sobel(img,cv2.CV_64F,dx=1,dy=0)#默認int8改為float64,可保存負數
img_x_full = cv2.convertScaleAbs(img_x_64)#轉換為絕對值,負數轉換為正數
img_y_64 = cv2.Sobel(img,cv2.CV_64F,dx=0,dy=1)#默認int8改為float64,可保存負數
img_y_full = cv2.convertScaleAbs(img_y_64)#轉換為絕對值,負數轉換為正數
img_xy_sobel_full = cv2.addWeighted(img_x_full, 1, img_y_full, 1, 0)
cv2.imshow('img_xy_sobel_full',img_xy_sobel_full)
cv2.waitKey(0)

4. 特點

  • 簡單高效,適合大多數情況。

  • 容易受噪聲影響。


二、Scharr 算子

1. 原理

Scharr 算子是 Sobel 算子的改進版本,當卷積核大小為 3 時,它在近似旋轉對稱性方面更優,因此檢測效果更清晰、平滑。

2. 函數原型

cv2.Scharr(src, ddepth, dx, dy)

相比 Sobel,參數更少,專門優化了 3×3 核的情況。

參數說明
src輸入圖像。
ddepth輸出圖像深度(如 cv2.CV_64F)。
dxx方向導數階數(只能取1)。
dyy方向導數階數(只能取1)。
scale縮放因子,默認 1。
delta偏移量,默認 0。
borderType邊界模式,默認 cv2.BORDER_DEFAULT

3. 示例代碼

img_x_64 = cv2.Scharr(img,cv2.CV_64F,dx=1,dy=0)#默認int8改為float64,可保存負數
img_x_full = cv2.convertScaleAbs(img_x_64)#轉換為絕對值,負數轉換為正數
img_y_64 = cv2.Scharr(img,cv2.CV_64F,dx=0,dy=1)#默認int8改為float64,可保存負數
img_y_full = cv2.convertScaleAbs(img_y_64)#轉換為絕對值,負數轉換為正數
img_xy_Scharr_full = cv2.addWeighted(img_x_full, 1, img_y_full, 1, 0)
cv2.imshow('img_xy_Scharr_full',img_xy_Scharr_full)
cv2.waitKey(0)

4. 特點

  • 對細節和紋理捕捉更好。

  • 運算速度和 Sobel 接近,但效果更佳。


三、Laplacian 算子

1. 原理

Laplacian 算子是 二階導數算子,通過檢測像素灰度的二階變化,直接找出邊緣。
與 Sobel、Scharr 不同,它不分方向,而是直接整體檢測。

2. 函數原型

cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])

參數說明:

  • src:輸入圖像。

  • ddepth:輸出圖像深度。

  • ksize:卷積核大小(一般取1、3、5)。

參數說明
src輸入圖像。
ddepth輸出圖像深度(如 cv2.CV_64F)。
dst輸出圖像(可選,通常不寫)。
ksize卷積核大小,必須為正奇數(常用 1、3、5)。
scale縮放因子,默認 1。
delta偏移量,默認 0。
borderType邊界模式,默認 cv2.BORDER_DEFAULT

3. 示例代碼

img_lap = cv2.Laplacian(img,cv2.CV_64F)
img_lap_full = cv2.convertScaleAbs(img_lap)#轉換為絕對值,負數轉換為正數
cv2.imshow('img_lap_full',img_lap_full)
cv2.waitKey(0)

4. 特點

  • 可以快速檢測邊緣,但更容易受噪聲干擾。

  • 常與高斯濾波結合使用(Laplacian of Gaussian, LoG)


四、Canny 算子

1. 原理

Canny 是經典的 多階段邊緣檢測算法,相比前面三種更穩定、抗噪能力更強。其步驟包括:

  1. 高斯濾波去噪。

  2. 計算梯度強度與方向。

  3. 非極大值抑制(只保留局部最大邊緣)。

  4. 雙閾值檢測(區分強邊緣與弱邊緣,并進行連接)。

2. 函數原型

cv2.Canny(image, threshold1, threshold2[, apertureSize[, L2gradient]])

參數說明:

  • image:輸入圖像,最好是灰度圖。

  • threshold1:低閾值。

  • threshold2:高閾值。

  • apertureSize:Sobel 算子的核大小(默認3)。

參數說明
image輸入圖像(必須是單通道灰度圖)。
threshold1低閾值,用于邊緣連接。
threshold2高閾值,用于確定強邊緣。
apertureSizeSobel 算子的卷積核大小(默認 3,可取 3、5、7)。
L2gradient計算梯度幅值的方法,默認為 False(使用 L1 范數),若為 True 使用 L2 范數,邊緣更精確但計算量更大。

3. 示例代碼

img_canny = cv2.Canny(img, threshold1=150, threshold2=230)#低,高
cv2.imshow('img_canny',img_canny)
cv2.waitKey(0)

4. 特點

  • 效果最優,邊緣清晰完整。

  • 閾值選擇影響很大。


五、效果對比總結

算子類型是否分方向抗噪性特點
Sobel一階導數一般快速,適合簡單邊緣檢測
Scharr一階導數較好Sobel改進,細節更清晰
Laplacian二階導數對噪聲敏感,常與濾波結合
Canny多階段檢測最優,邊緣清晰完整

六、實踐建議

  1. 快速檢測:用 Sobel 或 Scharr。

  2. 細節要求高:優先 Scharr。

  3. 檢測輪廓:Laplacian + 高斯濾波。

  4. 穩定性優先:Canny。


這樣,一張圖像可以通過這四種算子分別得到不同風格的邊緣信息,從而應用在 目標檢測、圖像分割、OCR、醫學影像分析 等場景中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94309.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94309.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94309.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch 環境配置

目錄一、安裝 CUDA二、安裝 PyTorch1. 創建虛擬環境2. 安裝 PyTorch三、在 PyCharm 上創建一個 PyTorch 項目參考文章: 【2025年最新PyTorch環境配置保姆級教程(附安裝包)】 【超詳細 CUDA 安裝與卸載教程(圖文教程)】…

鴻蒙中冷啟動分析:Launch分析

啟動的分類(熱身環節) 啟動動類型觸發條件系統開銷 & 速度主要優化方向冷啟動應用進程不存在(首次啟動或進程被殺后啟動)最高,需創建進程、加載資源、初始化所有組件主要優化目標,減少主線程任務&…

告別盲目排查,PolarDB+DAS Agent智能運維新突破

1.概述 周五下午6點正準備下班,數據庫CPU突然爆滿,業務告警響成一片,DBA卻要手動翻查CPU/內存/負載等多個監控指標,還要查詢是否有新增慢SQL,死鎖等問題?” 這可能是數據庫DBA最鬧心的場景了,…

Linux------《零基礎到聯網:CentOS 7 在 VMware Workstation 中的全流程安裝與 NAT 網絡配置實戰》

(一)Linux的發行版Centos安裝與配置 下載Linux發行版本Centos:centos-7-isos-x86_64安裝包下載_開源鏡像站-阿里云點擊CentOS-7-x86_64-DVD-2009.torrent ,CentOS-7-x86_64-DVD-2009.torrent是官方提供的 BT 種子文件(176.1 KB&a…

iOS App 混淆工具實戰,教育培訓類 App 的安全保護方案

隨著在線教育、企業培訓、知識付費平臺的興起,越來越多的 iOS 應用需要保護自己的課程資源和核心邏輯。然而,教育類 App 面臨的最大風險并非傳統的外掛或刷分,而是 視頻盜鏈、題庫數據泄露、源碼邏輯被二次利用。 在這種場景下,合…

RabbitMQ:SpringAMQP Topic Exchange(主題交換機)

目錄一、案例需求二、基礎配置三、代碼實現TopicExchange與DirectExchange類似,區別在于RoutingKey可以是多個單次的列表,并且以.分割。 Queue與Exchange指定BindingKey時可以使用通配符: #:代指0個或多個單詞。*:代…

(純新手教學)計算機視覺(opencv)實戰六——圖像形態學(腐蝕、膨脹、開運算、閉運算、梯度、頂帽、黑帽)

圖像形態學在圖像處理中,形態學(Morphology) 是一種基于圖像中物體形狀的處理方法,通常用于二值圖像和灰度圖像。它通過腐蝕、膨脹等基本操作,結合開運算、閉運算、梯度運算、頂帽、黑帽等派生操作,來實現去…

學習嵌入式第三十五天

文章目錄網絡(續上)1.函數接口2.相關功能實現1.TCP連接2.UDP習題網絡(續上) 1.函數接口 sendto 原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, sockle…

為什么給數據表加了索引,寫入速度反而變慢了

為數據表增加索引后之所以會導致寫入(包括插入、更新、刪除)操作的速度變慢,其根本原因在于索引本質上是一個獨立的、需要與主表數據保持實時同步的“數據結構”。這一機制的核心邏輯涵蓋五個方面:因為索引本質上是一個“獨立的數…

.NET Core 中采用獨立數據庫的SAAS(多租戶)方法

介紹多租戶是指一種軟件架構,其中軟件的單個實例在服務器上運行并為多個租戶提供服務。在基于 SAAS 的平臺中,租戶是指使用該平臺開展業務運營的客戶。每個租戶都擁有獨立的數據、用戶帳戶和配置設置,并且與其他租戶隔離。多租戶允許有效利用…

運維日常工作100條

這是一份非常詳細和實用的“運維日常工作100條”清單。它涵蓋了從日常巡檢、變更管理、故障處理到安全、優化和文檔等運維工作的方方面面,可以作為運維工程師的日常工作指南和檢查清單。 運維日常工作100條 一、日常巡檢與監控 (20條) 檢查核心監控大盤:查看整體業務健康狀態…

OpenHarmony子系統介紹

OpenHarmony子系統OpenHarmony子系統1. AI業務子系統2. 方舟運行時子系統3. ArkUI框架子系統4. DFX子系統5. DeviceProfile子系統6. XTS子系統7. 上傳下載子系統8. 主題框架子系統9. 事件通知子系統10. 位置服務子系統11. 元能力子系統12. 全局資源調度子系統13. 全球化子系統1…

博士招生 | 英國謝菲爾德大學 招收計算機博士

內容源自“圖靈學術博研社”gongzhonghao學校簡介謝菲爾德大學(The University of Sheffield)是英國久負盛名的公立研究型大學,也是羅素集團成員之一。在 2026 年 QS 世界大學排名中,謝菲爾德大學位列第92位,其中計算機…

如何理解面向過程和面向對象,舉例說明一下?

面向過程和面向對象是兩種不同的編程思想,核心區別在于解決問題的視角不同:前者關注 “步驟和過程”,后者關注 “對象和交互”。面向過程的核心思想是把問題拆解成一系列步驟,通過函數實現每個步驟,然后按順序調用這些…

深入了解評估與微調中使用的Graders:原理、實現與最佳實踐

深入了解評估與微調中使用的Graders 在模型評估與微調(Fine-tuning)過程中,Graders(評分器)是衡量模型輸出與參考答案之間表現的重要工具。本文將系統介紹Grader的類型、技術實現及如何在實際項目中融入穩定且高質量的…

行緩存(line buffer)在圖像卷積中的工作方式

上面這張圖配合文字,展示了行緩存(line buffer)在圖像卷積中的工作方式:上半部分是一個按行掃描輸入的圖像塊(示例為 99,編號 1–81)。 藍色表示已被寫入行緩存并按隊列等待的數據,綠…

【數據分享】中國371個城市的坡度矢量數據和excel數據

今天要說明數據就是中國371個城市的坡度矢量數據和excel數據。數據介紹在城市發展的進程中,地形地貌始終是影響規劃決策的關鍵因素,而坡度作為表征地表傾斜程度的核心指標,更是貫穿于城市建設、生態保護等諸多環節。本文將全面解讀中國 371 個…

《WINDOWS 環境下32位匯編語言程序設計》第7章 圖形操作(1)

圖形設備接口GDI(Graphics Device Interface)是Win32的一個重要組成部分,其作用是允許Windows的應用程序將圖形輸出到計算機屏幕、打印機或其他輸出設備上。GDI實際上是一個函數庫,包括直線、畫圖和字體處理等數百個函數。7.1 GDI…

數據結構-HashMap

在 Java 鍵值對(Key-Value)集合中,HashMap 是使用頻率最高的實現類之一,憑借高效的查找、插入性能,成為日常開發的 “利器”。本文將從 HashMap 的底層原理、核心特點、常用方法到遍歷方式、使用注意事項,進…

[系統架構設計師]安全架構設計理論與實踐(十八)

[系統架構設計師]安全架構設計理論與實踐(十八) 一.信息安全面臨的威脅 1.信息系統安全威脅的來源 物理環境,通信鏈路,網絡系統,操作系統,應用系統,管理系統 2.網絡與信息安全風險類別 風險類別…