当前位置: 首页 > news >正文

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} 31030003103

用于 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=xxorderyyorderxorder+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= 121000121

第二种情况对应于以下核:

[ − 1 − 2 − 1 0 0 0 1 2 1 ] \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} 101202101

函数原型

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;
}

运行结果

在这里插入图片描述

相关文章:

  • OpenCv高阶(五)——SIFT特征提取
  • git的上传流程
  • C 语言中的 volatile 关键字
  • 线束线缆从二维设计到虚拟验证全流程解决方案
  • 5、Props:组件间的密语——React 19 数据传递全解
  • 从入门到精通:Helm Charts 创建初学者指南
  • vue3的teleport和suspense是什么
  • 自学Matlab-Simscape(初级)- 2.3 Simscape Multibody 模块之Belts and Cables(皮带与线缆)
  • 京东商品详情API接口请求方式及数据文档说明
  • 无人机避障与目标识别技术分析!
  • 深入解析布尔注入:原理、实战与防御
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——PCIE2.0 x1接口测试
  • 计算机网络 - TCP协议
  • Node.js 数据库 事务 项目示例
  • 高版本Android (AIDL HAL) 使用HIDL方法
  • vue3 uniapp vite 配置之定义指令
  • 《vue3学习手记3》
  • 【UE5】连接射频线案例教程
  • 数据结构与算法[零基础]---4.树和二叉树
  • 视频孪生重构施工逻辑:智慧工地的数字化升级
  • wordpress内部结构/开封网站优化公司
  • wordpress h1/福州短视频seo机会
  • 常熟做网站多少钱按/长尾词优化外包
  • 凡科建站公司/免费网站在线客服系统源码
  • 聊城制作手机网站/网站排名优化制作
  • 做外贸哪几个网站好/中国时事新闻网