`

opencv之边缘检测(4)scharr

阅读更多
//-----------------------------------【头文件包含部分】---------------------------------------
//            描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include <opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

//-----------------------------------【命名空间声明部分】---------------------------------------
//            描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
//            描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main( )
{
	//【0】创建 grad_x 和 grad_y 矩阵
	Mat grad_x, grad_y;
	Mat abs_grad_x, abs_grad_y,dst;

	//【1】载入原始图
	Mat src = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图

	//【2】显示原始图
	imshow("【原始图】Scharr滤波器", src);

	//【3】求 X方向梯度
	Scharr( src, grad_x, CV_16S, 1, 0, 1, 0, BORDER_DEFAULT );
	convertScaleAbs( grad_x, abs_grad_x );
	imshow("【效果图】 X方向Scharr", abs_grad_x);

	//【4】求Y方向梯度
	Scharr( src, grad_y, CV_16S, 0, 1, 1, 0, BORDER_DEFAULT );
	convertScaleAbs( grad_y, abs_grad_y );
	imshow("【效果图】Y方向Scharr", abs_grad_y);

	//【5】合并梯度(近似)
	addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst );

	//【6】显示效果图
	imshow("【效果图】合并梯度后Scharr", dst);

	waitKey(0);
	return 0;
}

 

使用Scharr滤波器运算符计算x或y方向的图像差分。
其实它的参数变量和Sobel基本上是一样的,除了没有ksize核的大小。

C++: void Scharr(
InputArray src, //源图
 OutputArray dst, //目标图
 int ddepth,//图像深度
 int dx,// x方向上的差分阶数
 int dy,//y方向上的差分阶数
 double scale=1,//缩放因子
 double delta=0,// delta值
 intborderType=BORDER_DEFAULT )// 边界模式


第一个参数,InputArray 类型的src,为输入图像,填Mat类型即可。

第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。

第三个参数,int类型的ddepth,输出图像的深度,支持如下src.depth()和ddepth的组合:

                   若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F

                   若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F

                   若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F

                   若src.depth() = CV_64F, 取ddepth = -1/CV_64F

第四个参数,int类型dx,x方向上的差分阶数。

第五个参数,int类型dy,y方向上的差分阶数。

第六个参数,double类型的scale,计算导数值时可选的缩放因子,
                   默认值是1,表示默认情况下是没有应用缩放的。
                   我们可以在文档中查阅getDerivKernels的相关介绍,来得到这个参数的更多信息。

第七个参数,double类型的delta,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。

第八个参数, int类型的borderType,我们的老朋友了(万年是最后一个参数),边界模式,
                   默认值为BORDER_DEFAULT。这个参数可以在官方文档中borderInterpolate处得到更详细的信息。

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    18.图像锐化与边缘检测之Scharr算子、Canny算子和LOG算子1

    本篇主要介绍Scharr算子、Canny算子和LOG算子这三种常用的边缘检测方法。 1. **Scharr算子** Scharr算子是一种优化的Sobel算子,它考虑了像素之间的距离差异,因此在边缘检测时能提供更精确的结果。Scharr算子是对...

    OpenCV边缘检测算子

    OpenCV(开源计算机视觉库)提供了丰富的边缘检测算法,其中包括拉普拉斯算子和Scharr算子。本文将详细讲解这两个算子,并在VS2010环境下,结合OpenCV 2.4.7版本,探讨如何实现彩色图像的边缘检测。 首先,让我们...

    OpenCV边缘检测Canny算子sobel算子scharr滤波(VS2015+OpenCV3.4.9)

    OpenCV是一个广泛使用的开源计算机视觉库,它提供了多种边缘检测算法,包括Canny算子、Sobel算子和Scharr滤波器。在这个项目中,我们将探讨如何在Visual Studio 2015环境下,利用OpenCV 3.4.9版本实现这些边缘检测...

    【C++】OpenCV边缘检测示例程序 by浅墨

    博文《【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑》的配套详细注释源代码。 博文链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 1.已将dll...

    opencv 图像边缘检测及预处理核心代码

    在图像处理领域,OpenCV(开源计算机视觉库)是一个广泛使用的工具,尤其在图像边缘检测和预处理方面。本文将详细解析"opencv 图像边缘检测及预处理核心代码"的相关知识点,帮助读者深入理解OpenCV如何实现这些功能...

    Opencv Canny 边缘检测

    在给定的“Opencv Canny 边缘检测”主题中,我们主要关注的是如何利用OpenCV库中的Canny算法来实现图像的边缘检测。Canny算法是一种经典的多级边缘检测方法,由John F. Canny于1986年提出,因其高精度和低误检率而被...

    cannybianyuanjiance.rar_OPENCV 代码_opencv 边缘检测

    OpenCV(开源计算机视觉库)是一个强大的工具,它提供了多种边缘检测算法,其中包括Canny算法,这是一个经典的多级边缘检测方法。本压缩包文件“cannybianyuanjiance.rar”包含了一个使用OpenCV实现Canny边缘检测的...

    OPENCV边缘检测

    **OpenCV边缘检测详解** OpenCV(开源计算机视觉库)是一个强大的计算机视觉和机器学习库,广泛应用于图像处理和计算机视觉领域。边缘检测是图像处理中的一个基础且关键的步骤,它可以帮助我们从图像中识别出物体的...

    【OpenCV新手教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑.pdf

    【OpenCV新手教程之十二】主要讲解了OpenCV中用于边缘检测的四种算子和滤波器:Canny算子、Sobel算子、Laplace算子以及Scharr滤波器。边缘检测是计算机视觉中的一项基础技术,用于识别图像中的边界,从而突出关键...

    OpenCV中Canny边缘检测算法示例

    OpenCV是一个广泛使用的开源计算机视觉库,提供了多种边缘检测算法,其中包括著名的Canny算法。本篇将详细介绍Canny边缘检测算法在OpenCV中的应用。 Canny算法由John F. Canny在1986年提出,它是一种多级边缘检测...

    【OpenCV新手教程之十二】OpenCV边缘检测

    【OpenCV新手教程之十二】OpenCV边缘检测主要讲解了OpenCV中用于图像边缘检测的四种常见算子:Canny算子、Sobel算子、Laplace算子和Scharr滤波器。边缘检测是计算机视觉领域的一个基础任务,主要用于识别图像中的...

    OpenCV实现Scharr函数用法示例(C++实现).zip

    在给定的"OpenCV实现Scharr函数用法示例(C++实现).zip"文件中,我们可以找到一个C++项目,它展示了如何利用OpenCV库中的Scharr算子进行图像的边缘检测。Scharr算子是Sobel算子的一种改进,它在计算图像梯度时提供...

    opencv 实现canny检测

    Canny边缘检测是OpenCV中常用的一种经典边缘检测方法,由John F. Canny在1986年提出。这个方法通过多级计算和非极大值抑制来有效地找到图像中的边缘,同时减少假阳性边缘的检测。 在【标题】"opencv 实现canny检测...

    C++OpenCV3源代码Scharr函数用法

    通过上述介绍和示例代码,我们可以了解到如何在C++环境中使用OpenCV3中的Scharr函数进行边缘检测。这对于开发人员来说是非常实用的功能,可以帮助他们在图像处理项目中更好地识别和分析图像特征。

    opencv边缘检测动态调整

    opencv边缘检测动态调整,canny ,sobel,scharr,动态调整

    OpenCV计算机视觉学习(6)——图像梯度计算&边缘检测(Sobel算子,scharr算法,Laplacian算子,Canny

    本文将深入探讨OpenCV库中用于图像梯度计算和边缘检测的几种算法,包括Sobel算子、Scharr算法、Laplacian算子以及Canny算子。 **前言:边缘检测的定义和类型** 边缘检测是通过寻找图像亮度或颜色的显著变化来确定...

    利用多种方法完成边缘检测

    本文将深入探讨三种常用的边缘检测方法:Canny算子、Sobel算子和Scharr滤波器,并结合OpenCV库的使用进行详细讲解。 1. Canny算子: Canny算子是由John F. Canny在1986年提出的,它是一种多级边缘检测算法,以高...

    亚像素级别的边缘检测和获取

    Canny边缘检测是最早被广泛采用的边缘检测方法之一,由John F. Canny在1986年提出。它通过高斯滤波器去除噪声,然后应用一阶导数的计算来检测边缘。在OpenCV中,`cv::Canny()`函数实现了这个算法。你可以调整参数如...

    基于opencv的数字图像处理:边缘检测 完整代码+实验报告

    在OpenCV中,边缘检测可以通过多种方法实现,如Sobel算子、Scharr算子、Canny算子等。Canny算子是一种多级边缘检测算法,它结合了高斯滤波、梯度计算、非极大值抑制和双阈值检测,能有效避免噪声干扰并得到清晰的...

    使用opencv与pyqt5实现的图像处理程序,已实现转灰度图、图像平滑、形态学操作、梯度计算、阈值处理、边缘检测、轮廓检测

    Canny边缘检测算法 (`cv2.Canny()`) 是一种常用的边缘检测方法,它结合了高斯滤波、计算梯度强度和方向、非极大值抑制和双阈值检测来寻找图像的边缘。 7. **轮廓检测**:在找到图像的边缘后,可以使用`cv2....

Global site tag (gtag.js) - Google Analytics