Opencv3從頭開始(四)圖像邊緣檢測Canny、Sobel、Laplace

Opencv3從頭開始(四)圖像邊緣檢測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);

在這裏插入圖片描述在這裏插入圖片描述

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<opencv2/opencv.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章