Opencv3从头开始(四)图像边缘检测Canny、Sobel、Laplace

Opencv3从头开始(四)图像边缘检测Canny、Sobel、Laplace

  • 边缘检测部分:
    • 降噪处理:
    • Canny
    • Sobel
    • Laplace

边缘检测部分:

降噪处理:

    //灰度处理
    cvtColor(image,image_gray,CV_BGR2GRAY);
    //高斯平滑
    GaussianBlur(image_gray, image_gray, Size(3, 3), 0, 0);
    imshow("灰度图",image_gray);

Canny

 //canny算法,
    //高低阈值比,一般2~3、孔径默认3
    Mat image_canny,image_canny_1;
    Canny(image_gray,image_canny,65,130,3);
    imshow("Canny算法",image_canny);
    //灰度之后与原图融合结果
    image.copyTo(image_canny_1,image_canny);
    imshow("Canny灰度与原图融合结果",image_canny_1);

Opencv3从头开始(四)图像边缘检测Canny、Sobel、Laplace_第1张图片Opencv3从头开始(四)图像边缘检测Canny、Sobel、Laplace_第2张图片

Sobel

	//sobel算法
    //输出图像深度、x,y梯度,sobel核算子,缩放因子
    Mat image_sobel_x,image_sobel_y,image_sobel_xy,image_sobel;
    //sobel_x方向梯度
    Sobel(image_gray,image_sobel_x,-1,1,0,3,1,0,BORDER_DEFAULT);
    imshow("Sobel_x方向",image_sobel_x);
    //sobel_y方向梯度
    Sobel(image_gray,image_sobel_y,-1,0,1,3,1,0,BORDER_DEFAULT);
    imshow("Sobel_y方向",image_sobel_y);
    //sobel_xy方向梯度
    Sobel(image_gray,image_sobel_xy,-1,1,1,3,1,0,BORDER_DEFAULT);
    imshow("Sobel_xy方向",image_sobel_xy);
    //sobel_xy方向融合
    addWeighted(image_sobel_x, 0.5, image_sobel_y, 0.5, 0,image_sobel);
    imshow("Sobel算法",image_sobel);


Laplace

    //laplace算法
    //深度、孔径(奇)、比例因子
    Mat image_laplace;
    Laplacian(image_gray,image_laplace,-1,5,1,0,BORDER_DEFAULT);
    imshow("Laplce算法",image_laplace);

/*
--------------------------
边缘检测相关函数
二阶canny、laplace、
一阶sobel
--------------------------
*/

#include
#include
#include
#include
#include
#include

using namespace std;
using namespace cv;

int main(int argc, char* argv[]){
    Mat image_gray;
    Mat image=imread("仓老师.jpg");

    //灰度处理
    cvtColor(image,image_gray,CV_BGR2GRAY);
    //高斯平滑
    GaussianBlur(image_gray, image_gray, Size(3, 3), 0, 0);
    imshow("灰度图",image_gray);

    //canny算法,
    //高低阈值比,一般2~3、孔径默认3
    Mat image_canny,image_canny_1;
    Canny(image_gray,image_canny,65,130,3);
    imshow("Canny算法",image_canny);
    //灰度之后与原图融合结果
    image.copyTo(image_canny_1,image_canny);
    imshow("Canny灰度与原图融合结果",image_canny_1);

    //sobel算法
    //输出图像深度、x,y梯度,sobel核算子,缩放因子
    Mat image_sobel_x,image_sobel_y,image_sobel_xy,image_sobel;
    //sobel_x方向梯度
    Sobel(image_gray,image_sobel_x,-1,1,0,3,1,0,BORDER_DEFAULT);
    imshow("Sobel_x方向",image_sobel_x);
    //sobel_y方向梯度
    Sobel(image_gray,image_sobel_y,-1,0,1,3,1,0,BORDER_DEFAULT);
    imshow("Sobel_y方向",image_sobel_y);
    //sobel_xy方向梯度
    Sobel(image_gray,image_sobel_xy,-1,1,1,3,1,0,BORDER_DEFAULT);
    imshow("Sobel_xy方向",image_sobel_xy);
    //sobel_xy方向融合
    addWeighted(image_sobel_x, 0.5, image_sobel_y, 0.5, 0,image_sobel);
    imshow("Sobel算法",image_sobel);

    //laplace算法
    //深度、孔径(奇)、比例因子
    Mat image_laplace;
    Laplacian(image_gray,image_laplace,-1,5,1,0,BORDER_DEFAULT);
    imshow("Laplce算法",image_laplace);

    imshow("仓老师",image);
    waitKey(0);
    return 0;
}

你可能感兴趣的:(Opencv,opencv,计算机视觉,边缘检测,深度学习)