openCV:Canny算子

 Canny边缘检测:
1、高斯模糊 - GaussianBlur
2、灰度转换 - cvtColor
3、计算梯度 – Sobel/Scharr
4、非最大信号抑制
5、高低阈值输出二值图像 

Canny(
InputArray src, // 8-bit的输入图像
OutputArray edges,// 输出边缘图像, 一般都是二值图像,背景是黑色
double threshold1,// 低阈值,常取高阈值的1/2或者1/3
double threshold2,// 高阈值
int aptertureSize,// Soble算子的size,通常3x3,取值3
bool L2gradient // 选择 true表示是L2来归一化,否则用L1归一化

#include   
#include
#include "math.h"  

using namespace std;
using namespace cv;

int t1_value = 50;
int max_value = 255;
Mat src, gray_src, dst;//初始化一个操作对象
const char* OUTPUT_TITLE = "输出图片";
void Canny_Demo(int, void*);
int main(int argc, char** argv)
{
	src = imread("C:/Users/JAY/Desktop/Others/lena.jpg");
	if (!src.data)//判断图片是否加载进来
	{
		cout << "不能加载图片" << endl;
		return -1;
	}
	namedWindow("加载的图片", WINDOW_AUTOSIZE);
	namedWindow(OUTPUT_TITLE, WINDOW_AUTOSIZE);
	imshow("加载的图片", src);//""内命名一致,才能显示在一个窗口

	cvtColor(src, gray_src, CV_BGR2GRAY);
	createTrackbar("阈值", OUTPUT_TITLE, &t1_value, max_value, Canny_Demo);
	Canny_Demo(0, 0);


	waitKey(0);
	return 0;
}

void Canny_Demo(int, void *)
{
	Mat edge_output;
	blur(gray_src, gray_src, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
	Canny(gray_src, edge_output, t1_value, t1_value * 2, 3, false);//Canny算子

	//dst.create(src.size(), src.type());
	//src.copyTo(dst, edge_output);//将原图的彩色色素copy到二值化图像中,会彩色显示
	//imshow(OUTPUT_TITLE, dst);

	imshow(OUTPUT_TITLE, edge_output);

}

 结果

 

openCV:Canny算子_第1张图片

 

你可能感兴趣的:(openCV)