邊緣檢測部分:
降噪處理:
//灰度處理
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;
}