OpenCV:十四、Sobel边缘检测

2021-01-15  本文已影响0人  马洪滔

前言

在上一章中描述了图像处理边缘,详细描述可点击查看(https://www.jianshu.com/writer#/notebooks/47386368/notes/81791428)

目标

本章中,将学习:

卷积应用-图像边缘提取

相关API说明

void Sobel (  
InputArray src,//输入图  
 OutputArray dst,//输出图  
 int ddepth,//输出图像的深度  
 int dx,  
 int dy,  
 int ksize=3,  
 double scale=1,  
 double delta=0,  
 int borderType=BORDER_DEFAULT );  

代码演示

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
    //  1、加载图像,可以是BGR或者灰度图像
    Mat src = imread("/hsdf.png");
    if (!src.data) {
        printf("could not load image...\n");
        return -1;
    }
     src = cv.GaussianBlur(src, (3, 3), 0);
         gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY);

         grad_x = cv.Sobel(gray, -1, 1, 0, ksize=3);
         grad_y = cv.Sobel(gray, -1, 0, 1, ksize=3);

         grad  = cv.addWeighted(grad_x, 0.5, grad_y, 0.5, 0);
         cv.imshow("origin",src);
         cv.imshow("grad",grad);
         cv.waitKey();
     imshow(output_win, dst);
     waitKey(0);
    return 0;
}
结果图像.png

首先是高斯模糊去噪.某种意义上说高斯模糊是和sobel相反的过程.高斯模糊平滑了某点像素与周边像素的差异.那为什么还要先高斯去噪呢?
噪声就是像素的强度相对于真值有个突变。从时域上讲,通过高斯滤波能让一个像素的强度与周围的点相关,就减小了突变的影响;从频域上讲,突变引入了高频分量,而高斯滤波器可以滤除高频分量。
高斯去噪是为了防止把噪点也检测为边缘.
然后计算grad_x,grad_y.即对原图做水平方向/垂直方向的sobel卷积核卷积
最后将两个矩阵叠加,综合考虑水平和垂直方向的像素灰度值变化强度.得到边缘.

上一篇 下一篇

猜你喜欢

热点阅读