Opencv3 C++ VS2017 学习笔记 15 Canny边缘检测算法

  • Canny算法五步骤:Canny算法是边缘检测算法, 是一个很好的边缘检测器
    • GaussianBlur去噪点
    • 灰度转换cvtColor
    • 计算像素梯度Sobel/Scharr
    • 非最大值抑制(x\y方向上不是最大值的去掉)
    • 高低阈值输出二值图像
      • T1,T2为阈值, T2:T1 = 3:1 or 2:1,  T2为高阈值, T1为低阈值
      • >T2的像素,保留
      • 若像素>T1且和>T2的像素相互连接, 则保留该像素
  • Canny算法API
    • Canny(src, edges, threshold1, threshold2, Size, L2gradient);
    • 参数:原图片, 仅有边缘的图片, 低阈值, 高阈值, Sobel算子(计算梯度的算子)大小, L2gradient若为true,则用L2来归一化, false则L1归一化
    • 注意:Canny()得到的是二值图像
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>

using namespace std;
using namespace cv;
int t1 = 50;
int t2 = t1 * 2;
int max_value = 255;
void cannyCallback(int, void*);
Mat src, gray, bin, dst, canny;
int main(int argc, char ** argv)
{
	
	src = imread("C:\\Users\\xujin\\Desktop\\test1.JPG");
	if (!src.data)
	{
		cout << "no image";
		return -1;
	}
	namedWindow("src_image", WINDOW_AUTOSIZE);
	namedWindow("dst_image", WINDOW_AUTOSIZE);
	namedWindow("dstGray_image", WINDOW_AUTOSIZE);
	namedWindow("canny_image", WINDOW_AUTOSIZE);
	imshow("src_image", src);
	cvtColor(src, gray, COLOR_BGR2GRAY);
	imshow("dstGray_image", gray);
	createTrackbar("cannyT1T2", "canny_image", &t1, max_value, cannyCallback);
	cannyCallback(0, 0);

	waitKey(0);
	return 0;
}
void cannyCallback(int, void*)
{
	blur(gray, bin, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
	Canny(bin, canny, t1,t2, 3, false);
	imshow("canny_image", canny);
}

猜你喜欢

转载自blog.csdn.net/Mrsherlock_/article/details/104594498