//-----------------------------------【头文件包含部分】--------------------------------------- // 描述:包含程序所依赖的头文件 //---------------------------------------------------------------------------------------------- #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处得到更详细的信息。
相关推荐
本篇主要介绍Scharr算子、Canny算子和LOG算子这三种常用的边缘检测方法。 1. **Scharr算子** Scharr算子是一种优化的Sobel算子,它考虑了像素之间的距离差异,因此在边缘检测时能提供更精确的结果。Scharr算子是对...
OpenCV(开源计算机视觉库)提供了丰富的边缘检测算法,其中包括拉普拉斯算子和Scharr算子。本文将详细讲解这两个算子,并在VS2010环境下,结合OpenCV 2.4.7版本,探讨如何实现彩色图像的边缘检测。 首先,让我们...
OpenCV是一个广泛使用的开源计算机视觉库,它提供了多种边缘检测算法,包括Canny算子、Sobel算子和Scharr滤波器。在这个项目中,我们将探讨如何在Visual Studio 2015环境下,利用OpenCV 3.4.9版本实现这些边缘检测...
博文《【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑》的配套详细注释源代码。 博文链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 1.已将dll...
在图像处理领域,OpenCV(开源计算机视觉库)是一个广泛使用的工具,尤其在图像边缘检测和预处理方面。本文将详细解析"opencv 图像边缘检测及预处理核心代码"的相关知识点,帮助读者深入理解OpenCV如何实现这些功能...
在给定的“Opencv Canny 边缘检测”主题中,我们主要关注的是如何利用OpenCV库中的Canny算法来实现图像的边缘检测。Canny算法是一种经典的多级边缘检测方法,由John F. Canny于1986年提出,因其高精度和低误检率而被...
OpenCV(开源计算机视觉库)是一个强大的工具,它提供了多种边缘检测算法,其中包括Canny算法,这是一个经典的多级边缘检测方法。本压缩包文件“cannybianyuanjiance.rar”包含了一个使用OpenCV实现Canny边缘检测的...
**OpenCV边缘检测详解** OpenCV(开源计算机视觉库)是一个强大的计算机视觉和机器学习库,广泛应用于图像处理和计算机视觉领域。边缘检测是图像处理中的一个基础且关键的步骤,它可以帮助我们从图像中识别出物体的...
【OpenCV新手教程之十二】主要讲解了OpenCV中用于边缘检测的四种算子和滤波器:Canny算子、Sobel算子、Laplace算子以及Scharr滤波器。边缘检测是计算机视觉中的一项基础技术,用于识别图像中的边界,从而突出关键...
OpenCV是一个广泛使用的开源计算机视觉库,提供了多种边缘检测算法,其中包括著名的Canny算法。本篇将详细介绍Canny边缘检测算法在OpenCV中的应用。 Canny算法由John F. Canny在1986年提出,它是一种多级边缘检测...
【OpenCV新手教程之十二】OpenCV边缘检测主要讲解了OpenCV中用于图像边缘检测的四种常见算子:Canny算子、Sobel算子、Laplace算子和Scharr滤波器。边缘检测是计算机视觉领域的一个基础任务,主要用于识别图像中的...
在给定的"OpenCV实现Scharr函数用法示例(C++实现).zip"文件中,我们可以找到一个C++项目,它展示了如何利用OpenCV库中的Scharr算子进行图像的边缘检测。Scharr算子是Sobel算子的一种改进,它在计算图像梯度时提供...
Canny边缘检测是OpenCV中常用的一种经典边缘检测方法,由John F. Canny在1986年提出。这个方法通过多级计算和非极大值抑制来有效地找到图像中的边缘,同时减少假阳性边缘的检测。 在【标题】"opencv 实现canny检测...
通过上述介绍和示例代码,我们可以了解到如何在C++环境中使用OpenCV3中的Scharr函数进行边缘检测。这对于开发人员来说是非常实用的功能,可以帮助他们在图像处理项目中更好地识别和分析图像特征。
opencv边缘检测动态调整,canny ,sobel,scharr,动态调整
本文将深入探讨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中,边缘检测可以通过多种方法实现,如Sobel算子、Scharr算子、Canny算子等。Canny算子是一种多级边缘检测算法,它结合了高斯滤波、梯度计算、非极大值抑制和双阈值检测,能有效避免噪声干扰并得到清晰的...
Canny边缘检测算法 (`cv2.Canny()`) 是一种常用的边缘检测方法,它结合了高斯滤波、计算梯度强度和方向、非极大值抑制和双阈值检测来寻找图像的边缘。 7. **轮廓检测**:在找到图像的边缘后,可以使用`cv2....