码迷,mamicode.com
首页 > 其他好文 > 详细

Sobel算子

时间:2019-09-02 09:28:25      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:算子   weight   求导   高斯滤波   char   info   could   math   scale   

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算子

标签:算子   weight   求导   高斯滤波   char   info   could   math   scale   

原文地址:https://www.cnblogs.com/Jack-Elvis/p/11444617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!