opencv常用邊緣檢測算子示例

opencv常用邊緣檢測算子示例

    • 1. Canny算子
    • 2. Sobel算子
    • 3. Scharr算子
    • 4. Laplacian算子
    • 5. 對比


1. Canny算子

從不同視覺對象中提取有用的結構信息并大大減少要處理的數據量的一種技術,檢測算法可以分為以下5個步驟:

  1. 噪聲過濾(高斯濾波)
  2. 計算圖像梯度(Sobel濾波)
  3. 非極大值抑制(消除邊緣檢測帶來的雜散響應)
  4. 雙閾值處理(確定真實和潛在的邊緣)
  5. 滯后閾值(抑制孤立的弱邊緣)
import cv2
import matplotlib.pyplot as plotimg = cv2.imread('tmp.jpg', cv2.IMREAD_GRAYSCALE)
# 第2、3參數分別是低、高閾值
es = cv2.Canny(img, 100, 200)plot.figure(figsize=(6,3))
plot.subplot(1,2,1)
plot.title('Source image')
plot.imshow(img)
plot.subplot(1,2,2)
plot.title('Canny')
plot.imshow(es)plt.show()

在這里插入圖片描述

2. Sobel算子

一種離散一階導數的邊緣檢測算子,用于計算圖像灰度函數的近似梯度,常用于邊緣檢測和特征提取,可以分別計算圖像在X、Y方向的梯度。

import cv2
import numpy as np
import matplotlib.pyplot as plotimg = cv2.imread('tmp.jpg', cv2.IMREAD_GRAYSCALE)
sx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sy = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
sxy = np.sqrt(sx**2 + sy**2)
sxy = np.clip(sxy,0,255)plot.figure(figsize=(12,3))
plot.subplot(1,4,1)
plot.title('Source image')
plot.imshow(img)
plot.subplot(1,4,2)
plot.title('Sobel x')
plot.imshow(sx)
plot.subplot(1,4,3)
plot.title('Sobel y')
plot.imshow(sy)
plot.subplot(1,4,4)
plot.title('Sobel x+y')
plot.imshow(sxy)plt.show()

在這里插入圖片描述

3. Scharr算子

由Scharr提出的,用于替代Sobel算子,用于需要更高精度的邊緣檢測時,作為高精度邊緣檢測算子,用法跟Sobel類似。

import cv2
import numpy as np
import matplotlib.pyplot as plotimg = cv2.imread('tmp.jpg', cv2.IMREAD_GRAYSCALE)
sx = cv2.Sobel(img, ddepth=cv2.CV_64F, dx=1, dy=0)
sy = cv2.Sobel(img, ddepth=cv2.CV_64F, dx=0, dy=1)
sx = cv2.convertScaleAbs(sx)
sy = cv2.convertScaleAbs(sy)
sxy = cv2.addWeighted(sx,0.5, sy, 0.5, 0)plot.figure(figsize=(12,3))
plot.subplot(1,4,1)
plot.title('Source image')
plot.imshow(img)
plot.subplot(1,4,2)
plot.title('Scharr x')
plot.imshow(sx)
plot.subplot(1,4,3)
plot.title('Scharr y')
plot.imshow(sy)
plot.subplot(1,4,4)
plot.title('Scharr x+y')
plot.imshow(sxy)plt.show()

在這里插入圖片描述

4. Laplacian算子

一種基于二階導數的邊緣檢測方法,利用拉普拉斯算子來檢測圖像中強度變化的區域(邊緣),即通過計算圖像的二階導數,找到圖像亮度的突變點,從而定位邊緣的位置。

import cv2
import matplotlib.pyplot as plotimg = cv2.imread('tmp.jpg', cv2.IMREAD_GRAYSCALE)
la = cv2.Laplacian(img, cv2.CV_64F)plot.figure(figsize=(6,3))
plot.subplot(1,2,1)
plot.title('Source image')
plot.imshow(img)
plot.subplot(1,2,2)
plot.title('Laplacian')
plot.imshow(la)plt.show()

在這里插入圖片描述

5. 對比

算法優點缺點適用場景
Canny 算子噪聲抑制能力強,邊緣檢測效果好參數調節較為復雜通用邊緣檢測,適合大多數場景
Sobel 算子計算簡單,適合檢測水平和垂直邊緣對噪聲敏感,邊緣檢測效果一般檢測水平和垂直邊緣
Scharr 算子對邊緣的響應更強,適合檢測細微邊緣對噪聲敏感檢測細微的邊緣
Laplacian 算子可以檢測邊緣和角點對噪聲非常敏感檢測邊緣和角點

系列文章:

  1. opencv常用邊緣檢測算子示例
  2. 圖像顏色空間對比(Opencv)
  3. 圖像變換方式區別對比(Opencv)
  4. 常用圖像濾波及色彩調節操作(Opencv)
  5. 圖像形態學操作對比(Opencv)

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

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

相關文章

Token安全存儲的幾種方式

文章目錄 1. EncryptedSharedPreferences示例代碼 2. SQLCipher示例代碼 3.使用 Android Keystore加密后存儲示例代碼1. 生成密鑰對2. 使用 KeystoreManager 代碼說明安全性建議加密后的幾種存儲方式1. 加密后采用 SharedPreferences存儲2. 加密后采用SQLite數據庫存儲1. Token…

MySQL數據庫表的約束類型和使用

表完整約束性 約束條件 說明 PRIMARY KEY (PK) 標識該字段為該表的主鍵,是可以唯一的標識記錄,不可以為空 UNIQUENOT NULL (primary key) FOREIGN KEY (FK) 標識該字段為該表的外鍵,實現表與表之間的關聯 (foreign key) NULL …

Java 線程詳解 --線程概念、線程池、線程同步與安全機制

一、Java線程的概念 Java 線程的本質:每個線程對應一個操作系統線程,由操作系統調度。JVM 通過調用操作系統 API(如 Linux 的 pthread)創建線程。 關鍵點: ? 用戶態與內核態:線程調度依賴操作系統&#…

PCL 計算點云至平面距離(SIMD加速)

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 SIMD 是一種并行計算模型,其中“單指令”表示處理器在同一時刻執行相同的指令,而“多數據”則表示同一條指令操作多個數據元素(如數組中的多個元素或矩陣中的多個元素)。與傳統的串行計算不同,SIMD 能夠同時處理多個數…

Ubuntu 22.04 完美安裝 ABAQUS 教程:從零到上手,解決兼容問題

教程概述與安裝準備 本教程詳細介紹了在 Ubuntu 22.04 系統上安裝 ABAQUS 2023 及 ifort 2021 的步驟,并實現用戶子程序的鏈接。教程同樣適用于 ABAQUS 2021(需相應調整文件名和路徑)以及 Ubuntu 18.04 至 22.04 系統,盡管未在所有版本上測試。需要注意的是,Intel 的 One…

Spark-TTS(Text-to-Speech):基于大語言模型的語音合成革新者!!!

Spark-TTS:基于大語言模型的語音合成革新者 🚀 (全稱解析 核心特性 行業影響全解讀) 一、概念定義與技術定位 1. 英文全稱 Spark-TTS: An Efficient LLM-Based Text-to-Speech Model ? 關鍵詞解析: ? LLM-Based…

2025年十六屆藍橋杯Python B組原題及代碼解析

相關試題可以在洛谷上測試用例: 2025 十六屆 藍橋杯 Python B組 試題 A:攻擊次數 答案:103 print(103)代碼: # 初始化敵人的血量 x 2025# 初始化回合數 turn 0# 模擬攻擊過程 while x > 0:# 回合數加一turn 1# 第一個英…

Spring Boot項目中結合MyBatis實現MySQL的自動主從切換

原理解析 1. MySQL主從復制(Master-Slave Replication) 工作原理:MySQL主從復制通過二進制日志(binary log)來同步數據。主服務器記錄所有更改操作到二進制日志中,從服務器讀取這些日志并執行相應的SQL語…

【經驗記錄貼】使用配置文件提高項目的可維護性

mark一下。 整體修改前后如下: 課題: 在項目中有一個支持的文件類型的FILE_TYPE的定義, 這個是寫死在主程序中,每次增加可以支持的文件類型的時候,都需要去修改主程序中這個FILGE_TYPE的定義。 主程序修改其實不太花時…

用DeepSeek AI高效制作專業PPT

在當今職場中,制作精美而有力的PPT是展示想法、匯報工作和贏得機會的關鍵技能。然而,許多人花費過多時間在格式調整和內容組織上,而非專注于核心信息的傳達。DeepSeek AI作為新一代智能助手,能夠幫助您將PPT制作效率提升300%,同時顯著提高專業度。本文將詳細介紹如何利用D…

【AI學習從零至壹】語?模型及詞向量相關知識

語?模型及詞向量相關知識 ?然語?處理簡介?然語?理解(NLU)?然語??成(NLG)發展趨勢信息檢索技術布爾檢索與詞袋模型基于相關性的檢索 / TF-IDF舉例: 語?模型 / Language Model神經?絡語?模型Word2Vec訓練?法…

15.【.NET 8 實戰--孢子記賬--從單體到微服務--轉向微服務】--單體轉微服務--如何拆分單體

單體應用(Monolithic Application)是指將所有功能模塊集中在一個代碼庫中構建的應用程序。它通常是一個完整的、不可分割的整體,所有模塊共享相同的運行環境和數據庫。這種架構開發初期較為簡單,部署也較為方便,但隨著…

在ARM架構Mac上部署Python 3.12與Conda環境的全鏈路指南!!!

在ARM架構Mac上部署Python 3.12與Conda環境的全鏈路指南 🚀 (M1/M2芯片實測|含性能調優避坑手冊) 🌟 核心價值點 ? 原生ARM支持:突破Rosetta轉譯的性能損耗 ? 環境隔離:Conda虛擬環境管理多…

yml文件上傳并映射到實體類

文章目錄 功能背景功能需要前端開發組件選用組件嵌套和參數綁定上傳邏輯示例 后端開發接收邏輯解析邏輯省流純手動實現(不建議) 功能背景 開發一個配置文件解析功能,需要兼容老版本的配置文件。 功能需要 前端:兩個配置文件分別…

ElasticSearch中常用的數據類型

一、映射 Elasticsearch中通過映射來指定字段的數據類型,映射方式有2種,靜態映射和動態映射。 1.動態映射 使用動態映射時,無須指定字段的數據類型,Elasticshearch會自動根據字段內容來判斷映射到哪個數據類型。 比如&#xff…

【神經網絡結構的組成】深入理解 轉置卷積與轉置卷積核

🌈 個人主頁:十二月的貓-CSDN博客 🔥 系列專欄: 🏀《深度學習理論直覺三十講》_十二月的貓的博客-CSDN博客 💪🏻 十二月的寒冬阻擋不了春天的腳步,十二點的黑夜遮蔽不住黎明的曙光 …

CSS高度坍塌?如何解決?

一、什么是高度坍塌? 高度坍塌(Collapsing Margins)是指當父元素沒有設置邊框(border)、內邊距(padding)、內容(content)或清除浮動時,其子元素的 margin 會…

Web前端開發——格式化文本與段落(上)

一、學習目標 網頁內容的排版包括文本格式化、段落格式化和整個頁面的格式化,這是設計個網頁的基礎。文本格式化標記分為字體標記、文字修飾標記。字體標記和文字修飾標記包括對于字體樣式的一些特殊修改。段落格式化標記分為段落標記、換行記、水平分隔線標記等。…

關于PHP開源CMS系統ModStart的詳細介紹及使用指南

關于PHP開源CMS系統ModStart的詳細介紹及使用指南: 🔍 ModStart是什么? 基于Laravel框架開發的模塊化CMS系統采用Apache 2.0 開源協議,完全免費可商用特別適合需要快速搭建企業級網站/管理系統的開發者 🚀 核心優勢…

TCP標志位抓包

說明 TCP協議的Header信息,URG、ACK、PSH、RST、SYN、FIN這6個字段在14字節的位置,對應的是tcp[13],因為字節數是從[0]開始數的,14字節對應的就是tcp[13],因此在抓這幾個標志位的數據包時就要明確范圍在tcp[13] 示例1…