//-----------------------------------【头文件包含部分】--------------------------------------- // 描述:包含程序所依赖的头文件 //---------------------------------------------------------------------------------------------- #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("【原始图】sobel边缘检测", src); //【3】求 X方向梯度 Sobel( src, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT ); convertScaleAbs( grad_x, abs_grad_x ); imshow("【效果图】 X方向Sobel", abs_grad_x); //【4】求Y方向梯度 Sobel( src, grad_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT ); convertScaleAbs( grad_y, abs_grad_y ); imshow("【效果图】Y方向Sobel", abs_grad_y); //【5】合并梯度(近似) addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst ); imshow("【效果图】整体方向Sobel", dst); waitKey(0); return 0; }
Sobel 算子是一个主要用作边缘检测的离散微分算子 (discrete differentiation operator)。它Sobel算子结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。
sobel算子的计算过程:
我们假设被作用图像为 I.然后进行如下的操作:
1.分别在x和y两个方向求导。
①水平变化: 将 I 与一个奇数大小的内核Gx进行卷积。比如,当内核大小为3时, Gx的计算结果为:
②垂直变化: 将: I 与一个奇数大小的内核Gy进行卷积。比如,当内核大小为3时, Gx的计算结果为:
2.在图像的每一点,结合以上两个结果求出近似梯度:
另外有时,也可用下面更简单公式代替:
。
如果梯度G大于某一阈值,则认为该点(x,y)为边缘点。
原始图像:
边缘检测后的图像:
相关推荐
opencv边缘检测 C++ sobel prewitt Robert opencv边缘检测 C++ sobel prewitt Robert 两种实现,凑合着看吧 更正,for循环内,x y对调一下,for内部
OpenCV是一个强大的开源计算机视觉库,它提供了多种边缘检测算法,包括Canny和Sobel等。让我们深入探讨这些算法的工作原理、优缺点以及如何在OpenCV中实现它们。 **Canny边缘检测算法** Canny算法是一种多级边缘...
OpenCV 边缘检测算法,有利于理解,很不错,好好研究研究
OpenCV边缘检测Canny算子sobel算子scharr滤波等代码例子 ide环境VS2015,OpenCV3.4.9,编程语言C++
在"opencv3.0边缘检测"这个主题中,我们将重点关注Canny算法,因为它是最常用的边缘检测方法之一,以其鲁棒性和准确性著称。 Canny边缘检测算法包括以下几个步骤: 1. **高斯滤波**:首先,为了消除图像噪声,...
Sobel 边缘检测是 OpenCV 中一种常用的边缘检测方法,它通过应用离散微分算子来检测图像中的边缘。本篇文章将深入探讨 OpenCV 中的 Sobel 边缘检测原理及其源代码实现。 Sobel 边缘检测是基于梯度强度的一种方法。...
OpenCV是一个强大的开源计算机视觉库,广泛应用于图像处理和计算机视觉算法的实现,包括边缘检测。在这个主题中,我们将深入探讨如何使用OpenCV在Android平台上实现边缘检测。 一、OpenCV简介 OpenCV(Open Source ...
在这个特定的案例中,我们关注的是OpenCV如何实现边缘检测,特别是Canny算法。Canny边缘检测是一种广泛使用的边缘检测方法,由John F. Canny在1986年提出,它以其高精度和低错误率而闻名。 Canny边缘检测算法主要...
opencv4.2+visual studio下利用sobel算子实现边缘检测,实测好用
博文《【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑》的配套详细注释源代码。 博文链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 1.已将dll...
opencv opencv_基于c++实现的opencv图像处理算法之Sobel边缘检测
基于opencv的sobel算子的实现,包含相关文档和详细代码,可用于图像边缘检测的实现。
边缘检测是计算机视觉中的一个关键步骤,OpenCV提供了多种边缘检测算法,如Canny、Sobel、Laplacian和Hough Transform。Canny算法是一种广泛使用的边缘检测方法,它通过高斯滤波、计算梯度强度和方向、非极大值抑制...
OpenCV库提供了一系列高效的算法来实现这一功能,例如Canny边缘检测、Sobel、Laplacian等。 **1. iOS集成OpenCV** 要在iOS项目中使用OpenCV,首先需要通过CocoaPods或者Carthage进行依赖管理工具集成。在Podfile中...
本文将深入探讨如何使用OpenCV库来实现Sobel边缘检测。 OpenCV(开源计算机视觉库)是一个强大的跨平台库,它提供了大量的图像处理和计算机视觉功能。在OpenCV中,Sobel算子被用来计算图像的一阶和二阶导数,这些...
Canny算子和Sobel算子是两种广泛使用的边缘检测算法,它们都可以在Python环境中通过相关的库,如OpenCV或PIL,进行实现。 Canny算子是一种多级边缘检测算法,它包括高斯滤波、计算梯度幅度和方向、非极大值抑制以及...
OpenCV 是一个强大的开源计算机视觉库,它包含了各种图像处理和计算机视觉的算法。在给定的资源中,“Opencv ...对于经验丰富的开发者,它可以作为与其他更复杂边缘检测算法(如Sobel、Prewitt或Canny)对比的基础。
在OpenCV中,我们可以使用`cv2.Canny()`函数直接进行Canny边缘检测,它接受以下参数: - `image`:输入图像,应为灰度图像。 - `threshold1`:低阈值。 - `threshold2`:高阈值。 - `apertureSize`:Sobel算子的大小...
Opencv 库提供了多种边缘检测算法,包括 Sobel算子、Canny算子、Laplacian算子等。 在 Android Studio 中实现边缘检测需要按照以下步骤进行: 1. 导入 Opencv 库 首先,需要将 Opencv 库导入到 Android Studio ...
在VS2010集成开发环境中,使用OpenCV进行边缘检测,首先需要包含必要的头文件,如`#include <opencv2/opencv.hpp>`,然后加载图像,转换为灰度图像(因为拉普拉斯和Scharr算子通常应用于单通道图像),接着应用算子...