OpenCV 圖形API(38)圖像濾波-----Sobel 算子操作函數Sobel()

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

cv::gapi::Sobel 函數是 OpenCV 的 G-API 模塊中用于執行 Sobel 算子操作的一個函數,主要用于圖像的邊緣檢測。Sobel 算子通過計算圖像強度的梯度來工作,它使用一個內核在水平方向(dx)和垂直方向(dy)上進行卷積運算。

使用擴展的 Sobel 算子計算一階、二階、三階或混合圖像導數。
除了一個特殊情況外,在所有情況下,都會使用 ksize×ksize 可分離核來計算導數。當 ksize = 1 時,使用 3×1 或 1×3 核(即,不進行高斯平滑)。ksize = 1 僅可用于計算一階或二階 x- 或 y- 導數。
還有一個特殊的值 ksize = FILTER_SCHARR (-1),對應于 3×3 Scharr 濾波器,它可能比 3×3 Sobel 濾波器提供更準確的結果。Scharr 孔徑為

[ ? 3 0 3 ? 10 0 10 ? 3 0 3 ] \begin{bmatrix} -3 & 0 & 3 \\ -10 & 0 & 10 \\ -3 & 0 & 3 \end{bmatrix} ??3?10?3?000?3103? ?

用于 x 導數,或者轉置后用于 y 導數。

該函數通過將圖像與適當的核卷積來計算圖像導數:

dst = ? x o r d e r + y o r d e r src ? x x o r d e r ? y y o r d e r \texttt{dst} = \frac{\partial^{xorder+yorder} \texttt{src}}{\partial x^{xorder} \partial y^{yorder}} dst=?xxorder?yyorder?xorder+yordersrc?

Sobel 算子結合了高斯平滑和微分,因此結果對噪聲具有某種程度的抵抗性。通常,該函數被調用為 ( xorder = 1, yorder = 0, ksize = 3) 或 ( xorder = 0, yorder = 1, ksize = 3),以計算一階 x 或 y 圖像導數。第一種情況對應于以下核:

Sobel x = [ ? 1 0 1 ? 2 0 2 ? 1 0 1 ] \text{Sobel}_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} Sobelx?= ??1?2?1?000?121? ?

第二種情況對應于以下核:

[ ? 1 ? 2 ? 1 0 0 0 1 2 1 ] \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} ??101??202??101? ?

函數原型

GMat cv::gapi::Sobel
(const GMat &  	src,int  	ddepth,int  	dx,int  	dy,int  	ksize = 3,double  	scale = 1,double  	delta = 0,int  	borderType = BORDER_DEFAULT,const Scalar &  	borderValue = Scalar(0) 
) 		

注意:
如果硬件支持,則會進行向最近偶數的舍入;如果不支持,則舍入到最近。
函數文本ID是 “org.opencv.imgproc.filters.sobel”

參數

  • 參數 src: 輸入圖像。
  • 參數 ddepth: 輸出圖像深度,參見組合;對于8位輸入圖像,導數可能會被截斷。
  • 參數 dx: x方向導數的階數。
  • 參數 dy: y方向導數的階數。
  • 參數 ksize: 擴展 Sobel 核的大小;必須為奇數。
  • 參數 scale: 計算導數值的可選比例因子;默認情況下,不應用縮放(詳情參見 cv::getDerivKernels)。
  • 參數 delta: 在存儲到 dst 前添加到結果中的可選增量值。
  • 參數borderType: 像素外推方法,參見 cv::BorderTypes。
  • 參數 borderValue: 在常量邊界類型的情況下的邊界值。

代碼示例

#include <opencv2/gapi/gkernel.hpp>
#include <opencv2/gapi/imgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// 讀取輸入圖像cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );if ( src.empty() ){std::cerr << "無法讀取圖像" << std::endl;return -1;}// 定義G-API網絡cv::GMat in;auto sobelx = cv::gapi::Sobel( in, CV_16S, 1, 0 );  // X方向上的Sobel濾波auto sobely = cv::gapi::Sobel( in, CV_16S, 0, 1 );  // Y方向上的Sobel濾波cv::GComputation comp( cv::GIn( in ), cv::GOut( sobelx, sobely ) );// 應用到源圖像并獲取結果cv::Mat sobelX, sobelY;comp.apply( cv::gin( src ), cv::gout( sobelX, sobelY ) );// 將結果轉換為 CV_8U 并進行歸一化以便顯示cv::Mat sobelXAbs, sobelYAbs;cv::convertScaleAbs( sobelX, sobelXAbs );  // 轉換為 CV_8U 并取絕對值cv::convertScaleAbs( sobelY, sobelYAbs );  // 轉換為 CV_8U 并取絕對值// 可選:進一步歸一化以增強對比度(如果需要)double sobelXMin, sobelXMax;double sobelYMin, sobelYMax;cv::minMaxLoc( sobelXAbs, &sobelXMin, &sobelXMax );cv::minMaxLoc( sobelYAbs, &sobelYMin, &sobelYMax );cv::Mat sobelXNorm, sobelYNorm;sobelXAbs.convertTo( sobelXNorm, CV_8U, 255.0 / ( sobelXMax - sobelXMin ), -sobelXMin * 255.0 / ( sobelXMax - sobelXMin ) );sobelYAbs.convertTo( sobelYNorm, CV_8U, 255.0 / ( sobelYMax - sobelYMin ), -sobelYMin * 255.0 / ( sobelYMax - sobelYMin ) );// 顯示結果cv::imshow( "Original Image", src );cv::imshow( "Sobel X", sobelXNorm );cv::imshow( "Sobel Y", sobelYNorm );cv::waitKey( 0 );return 0;
}

運行結果

在這里插入圖片描述

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

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

相關文章

CS5346 - Interactivity in Visualization 可視化中的交互

文章目錄 Visualization representation interactionInteraction &#xff08;交互&#xff09;Benefits (好處)Typical Interaction Techniques&#xff08;交互技術&#xff09;SelectFilteringAbstract / Elaborate幾何放縮&#xff08;Geometric zoom)語義放縮&#xff0…

第十六屆藍橋杯大賽軟件賽省賽 C++ 大學 B 組 部分題解

賽時參加的是Python組&#xff0c;這是賽后寫的題解&#xff0c;還有兩題暫時還不會&#xff0c;待更新 題目鏈接題目列表 - 洛谷 | 計算機科學教育新生態 A 移動距離 答案&#xff1a;1576 C 可分解的正整數 Python3 import itertools from functools import cmp_to_ke…

Vue 解決 Error: please transfer a valid prop path to form item!

在 Vue.js 中使用表單驗證庫&#xff08;如 VeeValidate 或 Element UI 的表單組件時&#xff09;&#xff0c;遇到錯誤信息 "please transfer a valid prop path to form item!" 通常指的是在表單項的屬性綁定中&#xff0c;路徑&#xff08;prop path&#xff09;不…

在 Visual Studio Code 中安裝通義靈碼 - 智能編碼助手

高效的編碼工具對于提升開發效率和代碼質量至關重要。 通義靈碼作為一款智能編碼助手&#xff0c;為開發者提供了全方位的支持。 本文將詳細介紹如何在 Visual Studio Code&#xff08;簡稱 VSCode&#xff09;中安裝通義靈碼&#xff0c;以及如何進行相關配置以開啟智能編碼…

SQL 解析 with as dual sysdate level

目錄 sql的運行順序 with as EXTRACT ?編輯 dual sysdate level ?編輯 ?編輯 Oracle中的日期存儲 核心部分 拆解字符串并計算最小值 關聯子查詢 NVL 函數 REGEXP_SUBSTR() sql的運行順序 <select id="getTrendList" parameterType="java.uti…

快手OneRec 重構推薦系統:從檢索排序到生成統一的躍遷

文章目錄 1. 背景2. 方法2.1 OneRec框架2.2 Preliminary2.3 生成會話列表2.4 利用獎勵模型進行迭代偏好對齊2.4.1 訓練獎勵模型2.4.2 迭代偏好對齊 3. 總結 昨天面試的時候聊到了OneRec&#xff0c;但是由于上次看這篇文章已經是一個月之前&#xff0c;忘得差不多了&#xff0c…

軟考高級系統架構設計師-第11章 系統架構設計

【本章學習建議】 根據考試大綱&#xff0c;本章不僅考查系統架構設計師單選題&#xff0c;預計考12分左右&#xff0c;而且案例分析和論文寫作也是必考&#xff0c;對應第二版教材第7章&#xff0c;屬于重點學習的章節。 軟考高級系統架構設計師VIP課程https://edu.csdn.net/…

selenium之文件下載

Selenium 自動化測試&#xff1a;輕松搞定文件下載 在 Web 自動化測試中&#xff0c;經常會遇到需要驗證文件下載功能的場景。例如&#xff0c;測試報告的導出、用戶上傳文件的下載、PDF 文檔的生成與下載等等。Selenium 本身并沒有直接處理文件下載的內置方法&#xff0c;但我…

基于遷移學習實現肺炎X光片診斷分類

大家好&#xff0c;我是帶我去滑雪&#xff01; 肺炎是全球范圍內致死率較高的疾病之一&#xff0c;尤其是在老年人、免疫系統較弱的患者群體中&#xff0c;更容易引發嚴重并發癥。傳統上&#xff0c;肺炎的診斷依賴于醫生的臨床經驗以及影像學檢查&#xff0c;尤其是X光片&…

工業數據治理范式革新:時序數據庫 TDengine虛擬表技術解析

小T導讀&#xff1a;在工業數字化過程中&#xff0c;數據如何從設備采集順利“爬坡”到上層應用&#xff0c;一直是個難題。傳統“單列模型”雖貼合設備協議&#xff0c;卻讓上層分析舉步維艱。TDengine 用一種更聰明的方法打通了這條數據通路&#xff1a;不強求建模、不手動轉…

Redis面試——日志

一、RDB&#xff08;Redis DataBase&#xff09; RDB 全程是 Redis DataBase&#xff0c;它是一種將 Redis 在某一時刻內存中的數據以快照形式保存到磁盤的機制 &#xff0c;相當于給執行save/bgsave命令時刻的內存數據庫數據拍了一張快照我們如果通過save命令來執行快照&…

【Android】常用參數實踐 用戶界面UI 布局文件XML

本文將系統總結 Android XML 布局的通用參數和常用布局類型的專屬規則 一、通用布局參數 這些參數適用于所有 View 和 ViewGroup&#xff0c;是布局設計的基石。 1. 尺寸控制 android:layout_width 與 android:layout_height 定義視圖的寬度和高度&#xff0c;可選值&#xf…

解決 VSCode 中 NVM 配置后無法識別 Node 和 NPM 的問題

在開發中&#xff0c;我們經常需要使用 Node.js 和 NPM 來管理 JavaScript 項目依賴&#xff0c;而 NVM&#xff08;Node Version Manager&#xff09;是開發者在本地環境中管理多個 Node.js 版本的得力工具。不過&#xff0c;有時候在 VSCode 中配置完 NVM 后&#xff0c;可能…

BGP分解實驗·23——BGP選路原則之路由器標識

在選路原則需要用到Router-ID做選路決策時&#xff0c;其對等體Router-ID較小的路由將被優選&#xff1b;其中&#xff0c;當路由被反射時&#xff0c;包含起源器ID屬性時&#xff0c;該屬性將代替router-id做比較。 實驗拓撲如下&#xff1a; 實驗通過調整路由器R1和R2的rout…

Linux: 線程同步

目錄 一 前言 二 線程饑餓 三 線程同步 四 條件變量 1. cond &#xff08; condition&#xff09; 2. pthread_cond_wait() &#xff1a; 3. pthread_cond_signal() 五 條件變量的使用 一 前言 在上篇文章Linux : 多線程互斥-CSDN博客我們講解了線程互斥的概念&#xff…

MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句

在 MyBatis-Plus 中,QueryWrapper 的 exists 方法用于拼接 SQL 中的 EXISTS 子句,通常用于構 建子查詢條件。以下是具體用法和示例: ??1. 基本語法?? // 判斷是否存在符合條件的記錄 queryWrapper.exists(String existsSql); queryWrapper.notExists(String existsSq…

[數據結構]哈希表

目錄 1、哈希表 1.1、概念 1.2、沖突 2、哈希函數設計 3、負載因子調節 4、閉散列 5、開散列/哈希桶&#xff08;重點掌握&#xff09; 6、實現哈希桶 6.1、put方法 6.2、HashMap的擴容機制 6.3、get方法 7、HashMap 8、HashSet 8.1、哈希表性能分析 9、hashcod…

VS-Code創建Vue3項目

1 創建工程文件 創建一個做工程項目的文件夾 如&#xff1a;h5vue 2 cmd 進入文件 h5vue 3 輸入如下命令 npm create vuelatest 也可以輸入 npm create vitelatest 4 輸入項目名稱 項目名稱&#xff1a;自已輸入 回車 可以按鍵盤 a (全選) 回車&#xff1a; Playwright…

linux休眠喚醒流程

1、框架 2、休眠流程 應用層通過echo mem > /sys/power/state寫入休眠狀態&#xff0c;給一張大概流程圖 這個操作對應在kernel/power/main.c的state這個attr的store操作 static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, …

Mysql--基礎知識點--93--兩階段提交

1 兩階段提交 以update語句的具體執行過程為例&#xff1a; 具體更新一條記錄 UPDATE t_user SET name ‘xiaolin’ WHERE id 1;的流程如下&#xff1a; 1.執行器負責具體執行&#xff0c;會調用存儲引擎的接口&#xff0c;通過主鍵索引樹搜索獲取 id 1 這一行記錄&#…