圖像邊緣檢測

目錄

一.圖像邊緣檢測

1.圖像邊緣檢測概述

2.Sobel算子原理與實現

3.Scharr算子

4.Laplacian算子

5.Canny邊緣檢測(重點)

6.效果對比


一.圖像邊緣檢測

1.圖像邊緣檢測概述

2.Sobel算子原理與實現

代碼是實現步驟:

  • 邊緣檢測是圖像處理和計算機視覺中的重要工具,用于檢測數字圖像中的明顯變化、邊緣或不連續區域。
  • 主要方法包括:Sobel算子、scharr算子,Laplacian算子、Canny算子等。
  • Sobel算子結合高斯平滑和微分求導,通過局部差分計算梯度近似值。
  • 包含兩組3x3矩陣(橫向和縱向模板),分別用于水平和垂直方向的邊緣檢測。
  • 橫向檢測:用右邊像素值減去左邊像素值;縱向檢測:用下方像素值減去上方像素值。
  • 檢測時需分步進行(先橫向后縱向),避免同時設置dx=1dy=1導致結果不理想(線條過細且存在空洞)。
  • 橫向檢測
    • 使用cv2.Sobel(),設置dx=1dy=0,數據類型為cv2.CV_64F以保存負數梯度值。
    • 對結果取絕對值(cv2.convertScaleAbs)將負數轉為正數顯示。
  • 縱向檢測
    • 設置dx=0dy=1,同樣使用cv2.CV_64F并取絕對值。
  • 融合結果:通過圖像加權融合(cv2.addWeighted)將橫向和縱向檢測結果合并,填補空洞。
import cv2
#1.sobel算子
yuan=cv2.imread('img.png',0)
cv2.imshow('yuan',yuan)
cv2.waitKey(0)
#x方向上的邊緣
yuan_x=cv2.Sobel(yuan,-1,dx=1,dy=0)#信息范圍(0~255)
cv2.imshow('yuan_x',yuan_x)
cv2.waitKey(0)
yuan_x_64=cv2.Sobel(yuan,cv2.CV_64F,dx=1,dy=0)#信息范圍(-1020~1020)
cv2.imshow('yuan_x_64',yuan_x_64)
cv2.waitKey(0)
#x方向上的邊緣含負數信息無法顯示,所以進行取絕對值操作
yuan_x_full=cv2.convertScaleAbs(yuan_x_64)
cv2.imshow('yuan_x_full',yuan_x_full)
cv2.waitKey(0)
#y方向上的邊緣
yuan_y_64=cv2.Sobel(yuan,cv2.CV_64F,dx=0,dy=1)#信息范圍(-1020~1020)
cv2.imshow('yuan_y_64',yuan_y_64)
cv2.waitKey(0)
yuan_y_full=cv2.convertScaleAbs(yuan_y_64)
cv2.imshow('yuan_y_full',yuan_y_full)
cv2.waitKey(0)
#圖像加權運算組合
yuan_xy_full=cv2.addWeighted(yuan_x_full,1,yuan_y_full,1,0)
cv2.imshow('yuan_xy_full',yuan_xy_full)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意事項:

  • 輸入圖像需先轉換為灰度圖。
  • 避免直接使用unit8數據類型(會丟失負數梯度信息),推薦使用cv2.CV_64F
  • 分步檢測后融合的效果優于同時設置dx=1dy=1

3.Scharr算子

  • 改進:中心權重更大(中間為10,四角為3),精度更高,但線條更密集(可能包含更多偽邊緣)。
  • 代碼實現:僅需將Sobel算子中的cv2.Sobel改為cv2.Scharr
#2.scharr算子
img=cv2.imread('img.png',0)
cv2.imshow('img',img)
cv2.waitKey(0)
img_x_64 = cv2.Scharr(img,cv2.CV_64F,dx=1,dy=0)
img_x_full=cv2.convertScaleAbs(img_x_64)
img_y_64 = cv2.Scharr(img,cv2.CV_64F,dx=0,dy=1)
img_y_full=cv2.convertScaleAbs(img_y_64)
img_xy_full=cv2.addWeighted(img_x_full,1,img_y_full,1,0)
cv2.imshow('img_xy_full',img_xy_full)
cv2.waitKey(0)

4.Laplacian算子

  • 特點:不區分方向(直接計算變化率),卷積核中心為-4,四周為1,無需分步融合。
  • 代碼:cv2.Laplacian?+ 取絕對值,步驟更簡單,但效果較粗糙(線條斷續、顏色淡)。
    img=cv2.imread('img.png',0)
    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)

5.Canny邊緣檢測(重點)

  • 原理
    1. 高斯降噪:去除噪聲干擾。
    2. 梯度計算:通過Sobel算子計算梯度幅值和方向(像素變化最劇烈的方向)。
    3. 非極大值抑制:保留梯度方向上最亮的點,抑制其他點。
    4. 雙閾值篩選
      • 高閾值(如150):強邊緣(保留)。
      • 低閾值(如100):弱邊緣(若與強邊緣連接則保留,否則剔除)。
  • 代碼實現
    #4.canny算子
    img=cv2.imread('img.png',0)
    img_canny=cv2.Canny(img,120,180)
    img_canny_full=cv2.convertScaleAbs(img_canny)
    cv2.imshow('img_canny_full',img_canny_full)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
  • 優勢

邊緣更細、更真實(避免偽邊緣)。

背景干凈(純黑),僅保留顯著輪廓。

  • 參數調整:閾值過高可能導致邊緣斷裂,過低則噪聲增多。

6.效果對比

  • Sobel/Scharr:檢測較多細節(如花紋),但可能包含非邊緣信息。
  • Laplacian:線條較淡,連續性差。
  • Canny:僅保留強邊緣(如人物輪廓),背景純凈,適合

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

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

相關文章

zookeeper-znode解析

一. 數據模型:ZK擁有一個命名空間就像一個精簡的文件系統,不同的是它的命名空間中的每個節點擁有它自己或者它下面子節點相關聯的數據。ZK中必須使用絕對路徑也就是使用“/”開頭。二. znode:zk目錄樹中每個節點對應一個znode。每個znode維護…

Redis 高可用篇

主從復制是怎么實現的? 如果服務器發生了宕機,由于數據恢復是需要點時間,那么這個期間是無法服務新的請求的;如果這臺服務器的硬盤出現了故障,可能數據就都丟失了。 要避免這種單點故障,最好的辦法是將數據…

C++ 指針與引用面試深度解析

C 指針與引用面試深度解析面試官考察指針和引用,不僅是考察語法,更是在考察你對C中 “別名” (Aliasing) 與 “地址” (Addressing) 這兩種間接訪問機制的理解,以及你對 “代碼安全” 和 “接口設計” 的思考深度。第一部分:核心知…

LinuxC語言線程的同步與互斥

一.線程的同步與互斥1. 基礎概念:1.1 互斥:對共享資源的訪問,同一時刻只允許一個訪問者進行訪問,互斥具有唯一和排他性,互斥無法保證對共享資源的訪問順序1.2 同步: 在互斥的基礎上,實現對共享資源的有序訪問。2. 互斥…

Centos 7.6離線安裝docker

在內網環境下,一般不能聯網在線部署,這時候就需要以離線的方式安裝docker。本節內容主要總結一下在CentOS 7.6環境中離線安裝docker的步驟。 1、下載docker安裝包 https://pan.baidu.com/share/init?surlPaUllQZ-dwpgJ7quA5IkcQ&pwd4sfc 2、上傳到服…

生成式推薦模型的長序列特征:離線存儲

文章目錄長序列特征的例子1. Event-level features2. Sequence-level featuresAggregation FeaturesSession-based FeaturesTemporal Order Features3. User-level features4. Interaction features (between user and item/context)how to store the long term user behaviro …

Linux inode 實現機制深入分析

Linux inode 實現機制深入分析 1 Inode 基本概念與作用 Inode(Index Node)是 Linux 和其他類 Unix 操作系統中文件系統的核心數據結構,用于存儲文件或目錄的元數據(metadata)。每個文件或目錄都有一個唯一的 inode&…

Flask 之請求鉤子詳解:掌控請求生命周期

在構建現代 Web 應用時,我們常常需要在請求的不同階段自動執行一些通用邏輯,例如:記錄日志、驗證權限、連接數據庫、壓縮響應、添加安全頭等。如果在每個視圖函數中重復這些代碼,不僅冗余,而且難以維護。Flask 請求鉤子…

設計模式七大原則附C++正反例源碼

設計模式的七大原則是軟件設計的基石,它們指導開發者構建高內聚、低耦合、易維護、可擴展的系統。以下以C++為例,詳細介紹這七大原則: 一、單一職責原則(Single Responsibility Principle, SRP) 定義:一個類應該只有一個引起它變化的原因(即一個類只負責一項職責)。 …

云計算之中間件與數據庫

一、云數據庫的特性云數據庫是指被優化或部署到一個虛擬計算環境中的數據庫,可以實現按需付費、按需擴展、高可用性以及存儲整合等優勢。根據數據庫類型一般分為關系型數據庫和非關系型數據庫(NoSQL數據庫) 。云數據庫的特性序號云數據庫的特…

codeforces(1045)(div2) E. Power Boxes

E.電源箱 每次測試時限: 2 秒 每次測試的內存限制:256 兆字節 輸入:標準輸入 輸出:標準輸出 這是一個互動問題。 給你 nnn 個方格,索引從 111 到 nnn 。這些方格看起來完全相同,但是每個方格都有一個隱藏的…

4G模塊 EC200通過MQTT協議連接到阿里云

命令說明 基礎AT指令ATI顯示MT的ID信息ATCIMI查詢IMSIATQCCID查詢ICCIDATCSQ查詢信號強度ATCGATT?查詢當前PS域狀態MQTT配置指令ATQMTCFG配置MQTT可選參數ATQMTCFG配置MQTT可選參數.ATQMTOPEN打開MQTT客戶端網絡ATQMTCLOSE關閉MQTT客戶端網絡ATQMTCONN連接客戶端到MQTT服務器…

如何選擇合適的安全監測預警系統

在當今高度復雜和互聯的數字化時代,安全威脅無處不在且持續演變。一套高效、可靠的安全監測預警系統已成為組織保障其物理資產、數字信息和關鍵業務連續性的核心基礎設施。然而,面對市場上琳瑯滿目的產品和解決方案,如何做出符合自身需求的選…

ELK-使用logstash-output-zabbix插件實現日志通過zabbix告警

ELK-使用logstash-output-zabbix插件實現日志通過zabbix告警logstash-output-zabbix插件安裝編輯logstash配置文件在zabbix上創建模板實現的效果:elk收集上來的日志中含有報錯時(例如error等),logstash過濾出來將這部分日志打到zabbix,再通過zabbix結合釘…

【C++游記】物種多樣——謂之多態

楓の個人主頁 你不能改變過去,但你可以改變未來 算法/C/數據結構/C Hello,這里是小楓。C語言與數據結構和算法初階兩個板塊都更新完畢,我們繼續來學習C的內容呀。C是接近底層有比較經典的語言,因此學習起來注定枯燥無味&#xf…

Visual Scope (Serial_Digital_Scope V2) “串口 + 虛擬示波器” 工具使用記錄

VisualScope 就是一個 “串口 + 虛擬示波器” 的工具,適合在沒有昂貴示波器/邏輯分析儀時做嵌入式調試。它的核心步驟就是 MCU 定時發數據 → PC 串口接收 → 軟件畫波形。 首先準備串口通信工具后,插入電腦,安裝完USB轉串口驅動后,在“我的電腦”-“設備及管理器”-“端口…

c++ 觀察者模式 訂閱發布架構

#include <iostream> #include <vector> #include <algorithm> #include <memory> #include <mutex>// 觀察者接口 class IObserver { public:virtual ~IObserver() default;virtual void update(const std::string& message) 0; };// 主題…

oracle 表空間擴容(增加新的數據文件)

SELECT tablespace_name,file_name,ROUND(bytes / 1024 / 1024, 2) AS size_mb,ROUND(maxbytes / 1024 / 1024, 2) AS max_size_mb,status,autoextensible FROM dba_data_files ORDER BY tablespace_name;--給表空間增加一個新數據庫文件ALTER TABLESPACE EAS_D_EAS_STANDARDAD…

DAY 58 經典時序預測模型2

知識點回顧&#xff1a; 時序建模的流程時序任務經典單變量數據集ARIMA&#xff08;p&#xff0c;d&#xff0c;q&#xff09;模型實戰SARIMA摘要圖的理解處理不平穩的2種差分 n階差分---處理趨勢季節性差分---處理季節性 昨天我們掌握了AR, MA, 和 ARMA 模型&#xff0c;它們…