OpenCV-图像处理(19、Canny边缘检测)
Canny算法介绍
- Canny是边缘检测算法,在1986年提出的。
- 是一个很好的边缘检测器
- 很常用也很实用的图像处理方法
Canny算法介绍 - 非最大信号抑制
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,// 输出边缘图像,单通道 8-bit, 一般都是二值图像,背景是黑色
double threshold1,// 低阈值,常取高阈值的1/2或者1/3
double threshold2,// 高阈值
int aptertureSize,// Soble算子的size,通常3x3,取值3
bool L2gradient // 选择 true表示是L2来归一化,否则用L1归一化
)
默认情况一般选择是L1,参数设置为false
Canny算法介绍 – 五步 in cv::Canny
- 高斯模糊 - GaussianBlur
- 灰度转换 - cvtColor
- 计算梯度 – Sobel/Scharr
- 非最大信号抑制
- 高低阈值输出二值图像
程序代码
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;Mat src,gray_src,dst;
char* windows_name="Canny Demo Windows";
int value=50,max_value=255;
void Canny_Demo(int, void*);int main(){// 1. 加载图像src=imread("E:/Experiment/OpenCV/Pictures/girl.jpg");if(!src.data){printf("Could not load ... ");return -1;}namedWindow(windows_name,CV_WINDOW_AUTOSIZE);imshow("src",src);// 2. 转成灰度图像cvtColor(src, gray_src, CV_BGR2BGRA);// 3. 创建滚动条,拖动阈值createTrackbar("低阈值:", windows_name, &value, max_value, Canny_Demo);Canny_Demo(0,0);waitKey(0);return 0;
}
void Canny_Demo(int, void*){Mat blur_src;//这里的 blur 仅仅只是对原始图像去干扰,可有可无,Canny 函数内部已经实现了其算法的五个步骤blur(gray_src, blur_src, Size(3,3), Point(-1,-1),BORDER_DEFAULT);//输入图像的颜色数据类型要求是8bit , 输入图像可以是 gray ,也可以是 src ,src的干扰线比gray多很多Canny(blur_src, dst, value, value * 2, 3, false);//边缘检测提取,t1_value越大,检测到的边缘越少imshow(windows_name, dst); //如果使用 ~dst 表示将图像黑白反过来Mat result;result.create(src.size(), src.type());//创建一个相同类型,相同大小的Mat对象//如果mask.at(i,j)为1,则把src.at(i,j)赋给dst.at(i,j),如果mask.at(i,j)为0,则dst.at(i,j)设为0src.copyTo(result, dst);imshow("copyTo", result);
}
运行结果
OpenCV-图像处理(19、Canny边缘检测)相关推荐
- 图像处理---《Canny 边缘检测》
图像处理---<Canny 边缘检测> 很想系统的把图像处理之边缘检测部分详细的过一遍,对比一个各个算子的优良性能.时间紧,精力有限,现在只能走哪补哪,随手记. 有几个简单的场景,有需要, ...
- 图像处理之Canny边缘检测
图像处理之Canny 边缘检测 一:历史 Canny边缘检测算法是1986年有John F. Canny开发出来一种基于图像梯度计算的边缘 检测算法,同时Canny本人对计算图像边缘提取学科的发展也是 ...
- OpenCV+python:Canny边缘检测算法
1,边缘处理 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用. 在空域运算中来说,对图像的锐化就是计算微分.由于数字 ...
- OpenCV系列之Canny边缘检测 | 十九
在本章中,我们将学习 Canny边缘检测的概念 OpenCV函数: cv.Canny() 理论 Canny Edge Detection是一种流行的边缘检测算法.它由John F. Canny发明 1 ...
- 【数字图像处理】Canny边缘检测详解及编程实现
Canny边缘检测算法一直是边缘检测的经典算法.下面详细介绍Canny边缘检测算法的原理以及编程实现. Canny边缘检测基本原理: (1)图象边缘检测必须满足两个条件:一能有效地抑制噪声:二必须尽量 ...
- 图像处理:Canny边缘检测算法原理(一)
图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值.图象的边缘部分集中了图象的大部分信息,图象边 ...
- 【opencv】19.图像边缘检测算子数学原理、像素一二阶导数的意义
1.像素一二阶导数的意义 下面导数是数学中的定义 一阶导数定义: { f ′ ( x ) = lim Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x f ′ ( x ) = ...
- Opencv中的Canny边缘检测
文章目录 1.Canny引入 2.Canny算法实现步骤 (1)去噪 (2)计算梯度和梯度方向 (3)过滤非最大值 (4)使用阈值检测边缘 3.Canny函数实现 4.实例代码测试 (1)图片测试代码 ...
- 图像处理: Canny边缘检测
# Canny边缘检测 Canny边缘检测流程: 1,使用高斯滤波,以平滑图像,滤除噪声(归一化处理) 2.计算图像中每个像素点的梯度强度和方向(Sobel算子计算Gx.Gy) 3.应用非极大值抑制( ...
- python opencv 边缘检测_opencv-python-学习笔记十四(Canny边缘检测)
原理 Canny边缘检测是一种常用的边缘检测算法.由 John F. Canny提出 这是一个多阶段的算法,我们将经历每个阶段. 1.降低噪音 由于边缘检测容易受到图像中噪声的影响,第一步是用5x5高 ...
最新文章
- web-view里面的网页能请求未配置的request域名吗
- JAVA 设计模式 享元模式
- python apply_async数据量大不执行_apply_async里面的函数不执行
- java jmenuitem重新渲染_的Java的JMenuItem添加邊框的第二菜單項
- HTML多选mysql,html多选下拉框 | 学步园
- pq 中m函数判断嵌套_压轴题的热点,二次函数与几何的结合,谁会谁吃香
- 二叉树的遍历-递归与非递归 - 海子
- java 序列化 写入mysql_java 序列化到mysql数据库中
- redis常用命令getex_Redis常用命令
- MySQL 5之存储过程
- 【迅速上手】Python 画图 —— 箱图与密度图
- VMware Fusion安装VMware Tools
- 教学小结:我这样帮助学生提出疑问
- 读《期货市场计算机分析指南》笔记
- 2020届校招算法岗面经汇总
- 美国大学的交流访问学者怎样申请?
- HTML5期末大作业:体育网页设计——篮球专题6页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
- 钉钉企业开发的一些总结
- 利用c51进行数模转换并在液晶屏上显示_单片机数模转换
- Gazebo机器人仿真