OpenCV图像滤波(15)梯度计算函数Scharr()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

函数使用 Scharr 运算符计算图像的第一个 x- 或 y- 空间导数。

调用
Scharr(src, dst, ddepth, dx, dy, scale, delta, borderType) \texttt{Scharr(src, dst, ddepth, dx, dy, scale, delta, borderType)} Scharr(src, dst, ddepth, dx, dy, scale, delta, borderType)

等同于
Sobel(src, dst, ddepth, dx, dy, FILTERSCHARR, scale, delta, borderType) \texttt{Sobel(src, dst, ddepth, dx, dy, FILTERSCHARR, scale, delta, borderType)} Sobel(src, dst, ddepth, dx, dy, FILTERSCHARR, scale, delta, borderType)

Scharr() 函数是 OpenCV 中用于计算图像梯度的一个函数,它是一种改进的 Sobel 操作算子,能够提供更精确的梯度估计。Scharr() 函数通常用于边缘检测和特征提取等图像处理任务中。

函数原型

cpp 复制代码
void cv::Scharr
(
	InputArray 	src,
	OutputArray 	dst,
	int 	ddepth,
	int 	dx,
	int 	dy,
	double 	scale = 1,
	double 	delta = 0,
	int 	borderType = BORDER_DEFAULT 
)		

参数

  • 参数src 输入图像。
  • 参数dst 与 src 具有相同大小和通道数的输出图像。
  • 参数ddepth 输出图像深度,参见 combinations
  • 参数dx x 方向导数的阶数。
  • 参数dy y 方向导数的阶数。
  • 参数scale 可选的缩放因子,应用于计算出的导数值;默认情况下,不应用任何缩放(参见 getDerivKernels 以获取更多细节)。
  • 参数delta 可选的 delta 值,在存储结果之前添加到结果中。
  • 参数borderType 像素外推方法,参见 BorderTypes。BORDER_WRAP 不受支持。

代码示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
    // 加载图像
    cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_GRAYSCALE );

    if ( img.empty() )
    {
        std::cout << "无法加载图像,请检查路径是否正确。" << std::endl;
        return -1;
    }
    cv::Size sz2Sh( 400, 600 );
    cv::resize( img, img, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );
    // 计算 x 方向和 y 方向的梯度
    cv::Mat grad_x, grad_y;
    cv::Mat abs_grad_x, abs_grad_y;

    cv::Scharr( img, grad_x, CV_32F, 1, 0 );  // 计算 x 方向梯度
    cv::Scharr( img, grad_y, CV_32F, 0, 1 );  // 计算 y 方向梯度

    // 转换为绝对值
    cv::convertScaleAbs( grad_x, abs_grad_x );
    cv::convertScaleAbs( grad_y, abs_grad_y );

    // 显示结果
    cv::namedWindow( "Original Image", cv::WINDOW_NORMAL );
    cv::imshow( "Original Image", img );

    cv::namedWindow( "Gradient X", cv::WINDOW_NORMAL );
    cv::imshow( "Gradient X", abs_grad_x );

    cv::namedWindow( "Gradient Y", cv::WINDOW_NORMAL );
    cv::imshow( "Gradient Y", abs_grad_y );

    cv::waitKey( 0 );  // 等待按键

    return 0;
}

运行结果

相关推荐
xrgs_shz2 分钟前
直方图法、最大类间方差法、迭代法和自适应阈值法的图像分割的基本原理和MATLAB实现
人工智能·计算机视觉·matlab
向上的车轮7 分钟前
如何定制大模型——工业场景下大模型定制与私有化部署选型
人工智能
让学习成为一种生活方式39 分钟前
海洋类胡萝卜素生物合成的乙酰转移酶--文献精读217
人工智能
QQ6765800842 分钟前
服装计算机视觉数据集 连衣裙数据集 衣服类别识别 毛衣数据集 夹克衫AI识别 衬衫识别 裤子 数据集 yolo格式数据集
人工智能·yolo·计算机视觉·连衣裙·衣服类别·毛衣数据集·夹克衫ai
冰糖葫芦三剑客43 分钟前
人工智能生成合成内容文件元数据隐式标识说明函要怎么填写
人工智能
CV-杨帆1 小时前
ICLR 2026 LLM安全相关论文整理
人工智能·深度学习·安全
田八1 小时前
聊聊AI的发展史,AI的爆发并不是偶然
前端·人工智能·程序员
zandy10111 小时前
全链路可控+极致性能,衡石HENGSHI CLI重新定义企业级BI工具的AI协作能力
大数据·人工智能·ai analytics·ai native·agent-first
广州灵眸科技有限公司1 小时前
为RK3588注入澎湃算力:RK1820 AI加速卡完整适配与评测指南
linux·网络·人工智能·物联网·算法
小程故事多_801 小时前
从零吃透Transformer核心,多头注意力、残差连接与前馈网络(大白话完整版)
人工智能·深度学习·架构·aigc·transformer