`

opencv之边缘检测(2)sobel

 
阅读更多
//-----------------------------------【头文件包含部分】---------------------------------------
//            描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#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.分别在xy两个方向求导。

 

        ①水平变化: I 与一个奇数大小的内核Gx进行卷积。比如,当内核大小为3, Gx的计算结果为:

 


 

 

 

        ②垂直变化: : I 与一个奇数大小的内核Gy进行卷积。比如,当内核大小为3, Gx的计算结果为:

 


 

 

 

    2.在图像的每一点,结合以上两个结果求出近似梯度:

 


 

    另外有时,也可用下面更简单公式代替:

 



    如果梯度G大于某一阈值,则认为该点(x,y)为边缘点。

 

原始图像:

边缘检测后的图像:

  • 大小: 12.3 KB
  • 大小: 12.7 KB
  • 大小: 8.6 KB
  • 大小: 5.3 KB
  • 大小: 18.1 KB
  • 大小: 25.1 KB
分享到:
评论
发表评论

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

相关推荐

    opencv边缘检测 C++ sobel prewitt Robert

    opencv边缘检测 C++ sobel prewitt Robert opencv边缘检测 C++ sobel prewitt Robert 两种实现,凑合着看吧 更正,for循环内,x y对调一下,for内部

    opencv 边缘检测 canny,sobel等的综合示例

    OpenCV是一个强大的开源计算机视觉库,它提供了多种边缘检测算法,包括Canny和Sobel等。让我们深入探讨这些算法的工作原理、优缺点以及如何在OpenCV中实现它们。 **Canny边缘检测算法** Canny算法是一种多级边缘...

    【OpenCV】边缘检测:Sobel、拉普拉斯算子

    OpenCV 边缘检测算法,有利于理解,很不错,好好研究研究

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

    OpenCV边缘检测Canny算子sobel算子scharr滤波等代码例子 ide环境VS2015,OpenCV3.4.9,编程语言C++

    opencv3.0边缘检测

    在"opencv3.0边缘检测"这个主题中,我们将重点关注Canny算法,因为它是最常用的边缘检测方法之一,以其鲁棒性和准确性著称。 Canny边缘检测算法包括以下几个步骤: 1. **高斯滤波**:首先,为了消除图像噪声,...

    opencv sobel边缘检测源代码

    Sobel 边缘检测是 OpenCV 中一种常用的边缘检测方法,它通过应用离散微分算子来检测图像中的边缘。本篇文章将深入探讨 OpenCV 中的 Sobel 边缘检测原理及其源代码实现。 Sobel 边缘检测是基于梯度强度的一种方法。...

    opencv实现边缘检测

    OpenCV是一个强大的开源计算机视觉库,广泛应用于图像处理和计算机视觉算法的实现,包括边缘检测。在这个主题中,我们将深入探讨如何使用OpenCV在Android平台上实现边缘检测。 一、OpenCV简介 OpenCV(Open Source ...

    opencv实现边缘检测的源代码

    在这个特定的案例中,我们关注的是OpenCV如何实现边缘检测,特别是Canny算法。Canny边缘检测是一种广泛使用的边缘检测方法,由John F. Canny在1986年提出,它以其高精度和低错误率而闻名。 Canny边缘检测算法主要...

    sobel算子边缘检测_sobel_sobel算子_opencv4_边缘_drovecai_

    opencv4.2+visual studio下利用sobel算子实现边缘检测,实测好用

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

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

    opencv-基于c++实现的opencv图像处理算法之Sobel边缘检测.zip

    opencv opencv_基于c++实现的opencv图像处理算法之Sobel边缘检测

    sobel-opencv.rar_opencv sobel_opencv 边缘检测_sobelopencv_soblena

    基于opencv的sobel算子的实现,包含相关文档和详细代码,可用于图像边缘检测的实现。

    android+opencv边缘检测

    边缘检测是计算机视觉中的一个关键步骤,OpenCV提供了多种边缘检测算法,如Canny、Sobel、Laplacian和Hough Transform。Canny算法是一种广泛使用的边缘检测方法,它通过高斯滤波、计算梯度强度和方向、非极大值抑制...

    iOS opencv动态边缘检测

    OpenCV库提供了一系列高效的算法来实现这一功能,例如Canny边缘检测、Sobel、Laplacian等。 **1. iOS集成OpenCV** 要在iOS项目中使用OpenCV,首先需要通过CocoaPods或者Carthage进行依赖管理工具集成。在Podfile中...

    用opencv实现sobel的边缘检测

    本文将深入探讨如何使用OpenCV库来实现Sobel边缘检测。 OpenCV(开源计算机视觉库)是一个强大的跨平台库,它提供了大量的图像处理和计算机视觉功能。在OpenCV中,Sobel算子被用来计算图像的一阶和二阶导数,这些...

    canny算子、sobel算子边缘检测python代码

    Canny算子和Sobel算子是两种广泛使用的边缘检测算法,它们都可以在Python环境中通过相关的库,如OpenCV或PIL,进行实现。 Canny算子是一种多级边缘检测算法,它包括高斯滤波、计算梯度幅度和方向、非极大值抑制以及...

    Opencv Roberts边缘检测源代码

    OpenCV 是一个强大的开源计算机视觉库,它包含了各种图像处理和计算机视觉的算法。在给定的资源中,“Opencv ...对于经验丰富的开发者,它可以作为与其他更复杂边缘检测算法(如Sobel、Prewitt或Canny)对比的基础。

    opencv_边缘检测

    在OpenCV中,我们可以使用`cv2.Canny()`函数直接进行Canny边缘检测,它接受以下参数: - `image`:输入图像,应为灰度图像。 - `threshold1`:低阈值。 - `threshold2`:高阈值。 - `apertureSize`:Sobel算子的大小...

    Android studio opencv环境配置及边缘检测实例

    Opencv 库提供了多种边缘检测算法,包括 Sobel算子、Canny算子、Laplacian算子等。 在 Android Studio 中实现边缘检测需要按照以下步骤进行: 1. 导入 Opencv 库 首先,需要将 Opencv 库导入到 Android Studio ...

    OpenCV边缘检测算子

    在VS2010集成开发环境中,使用OpenCV进行边缘检测,首先需要包含必要的头文件,如`#include &lt;opencv2/opencv.hpp&gt;`,然后加载图像,转换为灰度图像(因为拉普拉斯和Scharr算子通常应用于单通道图像),接着应用算子...

Global site tag (gtag.js) - Google Analytics