Sobel算子

Posted jack-elvis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sobel算子相关的知识,希望对你有一定的参考价值。

Sobel算子就是对图像求导,得到图像边缘梯度。

技术图片

 

 

 技术图片

 

 技术图片

 

 

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
int main(int argc, char** argv) 
    Mat src, dst;
    int ksize = 0;

    src = imread("L:/5.jpg");
    if (!src.data) 
        printf("could not load image...\\n");
        return -1;
    

    char INPUT_WIN[] = "input image";
    char OUTPUT_WIN[] = "sobel-demo";
    namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
    namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
    imshow(INPUT_WIN, src);
    GaussianBlur(src, dst, Size(3, 3), 0, 0);  //高斯平滑,高斯滤波
    Mat gray_src;
    cvtColor(dst, gray_src,CV_BGR2GRAY);
    imshow("gray image", gray_src);
    
    Mat xgrad, ygrad;
    Sobel(gray_src, xgrad, CV_16S, 1, 0, 3);  //X轴方向梯度
    Sobel(gray_src, ygrad, CV_16S, 0, 1, 3); //Y轴方向梯度 
    convertScaleAbs(xgrad, xgrad);          //X梯度线性变换转换输入数组元素成8位无符号整形
    convertScaleAbs(ygrad, ygrad);          //Y梯度线性变换转换输入数组元素成8位无符号整形
    imshow("xgrad", xgrad);
    imshow("ygrad", ygrad);

    Mat xygrad;
    addWeighted(xgrad, 0.5, ygrad, 0.5, 0, xygrad);  //X、Y梯度各占权重0.5
    imshow("Final Result",xygrad);

    waitKey(0);
    return 0;

结果:

灰度图像

技术图片

 

 

 X轴方向梯度:

技术图片

 

 

 Y轴方向梯度:

技术图片

 

 0.5X+0.5Y方向:

技术图片

 

以上是关于Sobel算子的主要内容,如果未能解决你的问题,请参考以下文章

sobel算子里的阈值是怎么设的

OpenCV中不用库函数实现sobel算子

OpenCV 边缘检测之Sobel算子

图像边缘检测:Canny算子、Prewitt算子和sobel算子

OpenCV入门系列4:图像梯度常用算子——Sobel,Scharr和Laplacian算子

边缘检测sobel算子