opencv3.1学习笔记(19) Canny算子

Canny算子的原理是比较复杂的,勇哥听了几遍都没搞明白。

唉,还是先学会怎么用吧。


演示代码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
int t1_value = 50;
int max_value = 255;
void CannyDemo(int, void*);
Mat src, dst, gray;
char outputTitle[] = "Canny";
int main(int argc, char** argv) {
	
	src = imread("e:/girl.png");
	namedWindow("input", CV_WINDOW_AUTOSIZE);
	namedWindow(outputTitle, CV_WINDOW_AUTOSIZE);
	imshow("input", src);
	cvtColor(src, gray, CV_BGR2GRAY);
	createTrackbar("tv:", outputTitle, &t1_value, max_value, CannyDemo);
	CannyDemo(0, 0);
	
	waitKey(0);
	return 0;
}

void CannyDemo(int, void*) {
	Mat img1;
	blur(gray, gray, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
	Canny(gray, img1, t1_value, t1_value * 2, 3, false);
	//如果启用下面的代码后,输出的是彩色效果,原因是因为那个src.type()
	/*dst.create(src.size(), src.type());
	src.copyTo(dst, img1);*/
	imshow(outputTitle, img1);
}

image.png


代码说明:


Canny算法介绍

  • Canny是边缘检测算法,在1986年提出的。

  • 是一个很好的边缘检测器

  • 很常用也很实用的图像处理方法


Canny算法介绍 – 五步 in cv::Canny

  • 高斯模糊 - GaussianBlur

  • 灰度转换 - cvtColor

  • 计算梯度 – Sobel/Scharr

  • 非最大信号抑制

  • 高低阈值输出二值图像 


Canny算法介绍 - 非最大信号抑制

image.png

image.png


Canny算法介绍-高低阈值输出二值图像 

  • T1, T2为阈值,凡是高于T2的都保留,凡是小于T1都丢弃,从高于T2的像素出发,凡是大于T1而且相互连接的,都保留。最终得到一个输出二值图像。

  • 推荐的高低阈值比值为 T2: T1 = 3:1/2:1其中T2为高阈值,T1为低阈值


API – cv::Canny

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归一化
)

image.png

默认情况一般选择是L1,参数设置为false




--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文章代码及资料部分或全部来自贾志刚老师的视频,勇哥只是在个人理解的基础上做学习笔记,转载请附上博文链接!



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864