20-Canny边缘检测算法

opencv canny边缘检测算法详解 在1986年,Canny边缘检测算子首次在论文《A Computational Approach to Edge Detection》中提出,目前,Canny边缘检测算子已广泛应用于各种图像处理视觉系统。由于它是从不同视觉对象中提取有用的结构信息,所以了要处理的数据量大大减少。JOHN CANNY总结出,不同视觉系统对边缘检测具有较为类似的要求,所以,发现可以采用一种应用意义广泛的边缘检测技术。 JOHN CANNY采用了如下步骤设计实现了canny算子。 (1)消除噪声。边缘检测的算法的主要思想采用了图像 阅读详情

Canny边缘检测

1、Canny算法内容;
2、API : cv::canny();
3、代码演示;

Canny算法

1、Canny算法是一种边缘检测算法,1986年提出,是一个很好的边缘检测器,很常用也很实用的图像处理方法(提取边缘);

Canny算法步骤

Canny算法的主要步骤如下:
1. 高斯模糊(用于降噪,尽量去除噪声对最终图像的干扰);
2. 灰度转换(将图像转换为灰度图像);
3. 计算图像梯度(Sobel、Scharr);
4. 非最大信号抑制;
5. 高低阈值输出二值图像;(高低阈值连接)

注:非最大信号抑制是指:边缘的信号很强,梯度很大,但边缘只能有一个,对于非边缘的像素点进行抑制,即非最大信号抑制,如果在它的梯度方向上其不是最大值,就将其去掉。
高低阈值连接:经过非最大信号抑制操作后,边缘已经很明显了,但部分边缘由于干扰没有连接起来,使用高低阈值可以将边缘连接起来(大于最高阈值保留,小于最低阈值丢弃,在两者之间,进行高低阈值连接),高低阈值连接后,即可输出对应的二值图像

非最大信号抑制实现

1、根据前几步的计算,可以得到X方向上的梯度Gx,Y方向上的梯度GY,以及合成后的梯度G∑;以及梯度的夹角θ;如下图所示;
2、θ代表梯度的方向,取值(0°~180°),如果X方向梯度大,θ就会很小,如果Y方向梯度大,θ就趋近90°;
3、理论…
在这里插入图片描述
在这里插入图片描述

高低阈值输出二值图像

如下:
在这里插入图片描述

API说明

1、Canny()算法API:Canny();
注: Canny(): 不支持彩色图像输入,只能输入8位灰度图像
L1/L2的选择是决定使用完整归一化(true)还是使用简化归一化(有误差)(false)求取X,Y混合后的梯度;
一般不使用L2,L1精度足够了;
在这里插入图片描述

在这里插入图片描述

Code

代码说明:
1、可以先转换为灰度图像,再进行滤波操作;
2、src.copyto(dst,edge_image): 将Canny计算得到的二值图像作为函数的掩膜(遮盖层),这样做,可以从原图像中提取出轮廓的彩色图像(只有非0的元素才能被Copy);
3、二值图像对象前加~可以对像素值取反,改变图像背景色;
4、Canny计算速度比较慢,同时,高低阈值的选取会影响最终的输出结果,使用时最好先找到合适的高低阈值;Canny()算法最终输出的是二值图像;阈值设置越低,保留的细节越多;

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

using namespace std;
using namespace cv;

Mat src, dst, graysrc;
int t1_value = 50;
int max_value = 255;
const char * OUTPUT_WIN = "Canny Result";
void Canny_Demo(int, void*);
int main(int argc, char** argv)
{
	
	src = imread("C:\\Users\\hello\\Desktop\\lena512color.tiff");
	if (!src.data)
	{
		cout << "could not load the image..." << endl;
		return -1;
	}
	namedWindow("input image",CV_WINDOW_AUTOSIZE);
	imshow("input image", src);
	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);

	cvtColor(src, graysrc, CV_BGR2GRAY); //转换为灰度图像
	//创建滑动条
	createTrackbar("Threshold Value:", OUTPUT_WIN, &t1_value, max_value, Canny_Demo);
	Canny_Demo(0, 0);

	waitKey(0);
	return 0;
}
void Canny_Demo(int, void*)
{
	Mat edge_output;
	//blur(graysrc, graysrc, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);//均值滤波
	GaussianBlur(graysrc, graysrc, Size(3, 3), 0, 0);
	Canny(graysrc, edge_output, t1_value, t1_value * 2, 3, false);

	imshow(OUTPUT_WIN, ~edge_output);

	//低阈值高阈值会影响Canny运算的结果,应该首先找到一个合适的值

	dst.create(src.size(), src.type());//调用create方法对mat初始化
	//mask非0,则将图像拷贝到dst,是0,则不拷贝,Canny运算后会将边缘保留,为1,作为掩膜计算即可得到边缘图像
	src.copyTo(dst, edge_output);//将二值图像中1的像素提取到新的图像中,形成彩色图片
	//imshow(OUTPUT_WIN, dst);

}

效果

Canny计算原始图:(二值图像)
在这里插入图片描述
反转颜色图:
在这里插入图片描述

彩色图片提取图:(保留彩色图像中轮廓的像素点)
在这里插入图片描述

Canny边缘检测算法(python 实现) 文章目录最优边缘准则算法实现步骤1. 应用高斯滤波来平滑(模糊)图像,目的是去除噪声2. 计算梯度强度和方向3. 应用非最大抑制技术NMS来消除边误检4. 应用双阈值的方法来决定可能的(潜在的)边界5. 利用滞后技术来跟踪边界opencv实现Canny边缘检测手写代码参考文章 最优边缘准则     Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:     (1)最优检测:算法能够尽可能多地标识出图像中的实际边缘,漏检真实边缘的概率和误检非边缘的概率都尽可能小;     (2)最优定 阅读详情

相关推荐

Python-Opencv中边缘检测中Canny算法

Python-Opencv中边缘检测中Canny算法 边缘检测 边缘检测的目的是在保留原有图像属性的情况下,显著减少图像的数据规模。目前有多种算法可以进行边缘检测,虽然Canny算法年代久远,但可以说它是边缘检测的一种标准算法,而且仍在研究中广泛使用。 Canny算法 Canny算法是边缘检测中的一种算法,对边缘算法的理解,以下内容我觉得可以很好理解,以下内容转载于一篇博客,博客地址为 https...

qq_44262417的博客 6570

Canny算法

Canny Canny分为5个步骤 1)、使用高斯滤波器,以平滑图像,滤除噪声。 高斯滤波器是一种平滑空间滤波器,用于模糊处理和降低噪声。我们的高斯滤波器通过以下公式得到。 我们运用该公式计算出高斯卷积核,如k越大,检测器对噪声的敏感度越低(即可以更好地筛去噪声),但是检测边缘的定位误差也会相应增加,一般我们设置5*5的高斯卷积核是一个比较好的衡量 2)、计算图像中每个像素点的梯度强度和方向。 ...

Jamence的博客 1万+

图像处理——Canny边缘检测算法(原理+代码演示)

Canny边缘检测Canny算法介绍Canny算法原理第一步:高斯模糊第二步:Sobel梯度算子第三步:非极大值抑制(NMS)第四步:双阈值连接视频流Canny边缘检测(阈值可调) Canny算法介绍 Canny边缘检测算法是一种多级边缘检测算法,John F. Canny于 1986 年开发出来。在许多方面的应用都有着它的身影。因此,不管是为了学习或者工作,学习Canny算法的原理和实现都是非常...

minjiuhong的博客 1万+

Canny边缘检测算法

Canny是目前最优秀的边缘检测算法之一,其目标为找到一个最优的边缘,其最优边缘的定义为:1、好的检测:算法能够尽可能的标出图像中的实际边缘2、好的定位:标识出的边缘要与实际图像中的边缘尽可能接近3、最小响应:图像中的边缘只能标记一次。

Dr.Monster小站 5693

JavaCV 图像边缘检测 之 Canny 算法

本文详细介绍了JavaCV图像边缘检测之Canny 边缘检测算法。首先阐述了Canny 边缘检测的原理,包括高斯滤波、计算梯度幅值和方向、非极大值抑制以及双阈值检测等关键步骤。然后介绍了在 Java 项目中使用 JavaCV 实现Canny 边缘检测的 Maven 依赖。接着,通过详细的代码示例展示了Canny 边缘检测的每个关键步骤,并对代码进行了注释说明。最后,通过案例分析和图像对比展示了Canny 边缘检测的实际效果。通过本文的学习,读者可以掌握Canny 边缘检测算法。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 4301

基于自适应滤波的Canny边缘检测改进算法研究与实现

回顾这场技术旅程,你会发现 Canny 算法的伟大之处不仅在于其严密的数学推导,更在于它的模块化设计理念——每个步骤都可以独立优化升级。今天的改进版已经具备:- 自适应滤波 → 更聪明的去噪;- 多梯度融合 → 更全面的特征提取;- 动态阈值 → 更智能的决策机制。未来呢?完全可以融入深度学习先验,比如用注意力机制引导权重分配,或将 CNN 提取的高层语义反馈给低层边缘检测器,形成闭环优化系统。但这并不意味着我们要抛弃传统方法。相反,

weixin_35756892的博客 401

Canny边缘检测

1.算法概述   Canny 边缘检测是一种使用多级边缘检测算法检测边缘的方法。1986 年,John F. Canny 发表了著名的论文 A Computational Approach to Edge Detection,在这篇论文中详述了如何进行边缘检测。  通常情况下边缘检测的目的是在保留原有图像属性的情况下,显著减少图像的数据规模。有多种算法可以进行边缘检测,虽然Canny算法年代久远,但可以说它是边缘检测的一种标准算法,而且仍在研究中广泛使用。 2.最优边缘准则 Canny 的目标是找到一个最.

半濠春水的博客 2万+

VASP编译疑难解析—手动配置icx路径解决libintel64报错

本文针对VASP编译过程中执行`make libintel64`时遇到的`icx: 没有那个文件或目录`报错,提供了详细的解决方案。核心在于手动定位Intel oneAPI编译器的绝对路径,并修改makefile中的编译器变量,从而解决因系统PATH环境变量未正确设置导致的libintel64编译失败问题。

weixin_28834765的博客 125

【数字图像处理】Canny边缘检测详解及编程实现

Canny边缘检测算法一直是边缘检测的经典算法。下面详细介绍Canny边缘检测算法的原理以及编程实现。 Canny边缘检测基本原理: (1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。 (2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。 (3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。 ...

weixin_34025151的博客 3489

linux离线安装nginx

linux离线安装nginx

zhang_130914036的博客 9346

基于51单片机扫地机器人(全套Proteus仿真+原理图+程序+说明书)

(内含源程序代码,原理图,仿真,讲解视频,元件清单等,【精品】值得推荐!!!扫地机器人是以单片机为主控制器。通过单片机控制小车行驶、除尘、蜂鸣。扫地机器人使用双电机驱动,以提高整车运动的平稳性;在智能车进驶过程中,采用双超声波模块实现避障。

2301_76434107的博客 1894

canny算子介绍

Canny算子是John.F.Canny于20世纪80年代提出的一种多级边缘检测算法。该算子最初的提出是为了能够得到一个最优的边缘检测,即:检测到的边缘要尽可能跟实际的边缘接近,并尽可能的多,同时,要尽量降低噪声对边缘检测的干扰。 Canny算子边缘检测算法的计算步骤:

计算机视觉小菜鸟的专栏 8793

ue4 classuobject没有成员beginplay_【教程】UE4 C++实现简单的AI及遇到的坑

后续文章更新移步→微信公众号“虚幻社区”(mantra-xhsq),您的支持是我创作的动力。我们这篇文章的宗旨是用代码实现简单的AI,有多简单,只是搭建一个具有PawnSensing组件和回调的AI。重点也不是做一个AI,而是了解一下C++代码如何搭建最基本的AI(关于蓝图如何创建请自行百度)。如果英语还不错的话,可以移步 参考链接,链接中的内容除了创建基本的PawnSensing组件还有关于行为...

weixin_39929918的博客 1126

Halcon 算子实战:Sobel、Canny、Laplace 3种边缘检测算法性能与效果对比

本文深入对比了Halcon中Sobel、Canny和Laplace三种边缘检测算法在图像处理中的性能与效果。通过量化实验数据,分析了它们在抗噪性、定位精度和计算效率等关键指标的差异,并提供了针对不同工业场景的选型指南和优化技巧,帮助工程师在实际应用中做出科学决策。

weixin_33739541的博客 542

ADS124S08配置避坑指南:从SPI时序到寄存器设置,手把手教你调通24位ADC

本文详细解析了ADS124S08 24位ADC的SPI时序配置、寄存器设置及外围电路设计中的关键细节,帮助工程师避开常见陷阱。从SPI通信模式选择到DRDY引脚读取优化,再到基准电压启动时间调整,提供了实战验证的解决方案,确保高精度数据采集的稳定性。

weixin_29192365的博客 285

实时系统vxWorks - 虚拟机环境搭建

概述VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的...

不只会拍照的程序猿 7850

图像预处理-高斯去噪-边缘检测

边缘检测 边缘检测容易受到噪声影响,一般第一步都是用5*5的高斯滤波器去除噪声。 #!/usr/bin/env python # -*- coding:utf-8 -*- import numpy as np import cv2 img = cv2.imread('IMG_1868.JPG') img = cv2.GaussianBlur(img,(3,3),0)#高斯模糊 去噪 以免影响边缘检测 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) edges

世上再无张显宗 4802

YOLOv13改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 已更新种不同的改进方案,专栏内的每篇文章皆,均可顺利运行。2️⃣ 订阅专栏即可进群获取以及从的各种答疑内容。3️⃣ 全新的YOLOv13改进专栏,,只为更好的满足论文发表的要求。专栏内容,专栏实时评分,全网最高,质量保证。🎫。。

Limiiiing的博客 9145

OpenCV Canny边缘提取

OpenCV Canny边缘提取

m0_37302966的博客 537

Simulink开发项1000例实战专栏--实例38:基于Simulink的周波变换器(Cycloconverter)

需求分析周波变换器(Cycloconverter),也称为频率变换器或直接变频器,是一种将输入的固定频率交流电直接转换为不同频率的交流电的电力电子设备。它广泛应用于工业领域,如大功率电机驱动、风力发电、船舶推进系统等场合。与传统的间接变频器(如交-直-交变频器)相比,周波变换器具有更高的效率和更简单的结构,适用于需要低频输出的应用场景。

xiaoheshang_123的博客 334

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

(十一)Canny 边缘检测算法

Canny边缘检测算法 一、边缘检测的步骤 1)滤波: 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感, 因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波、均值滤波等。 2)增强: 增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点邻域 强度值有显著变化的点凸显出来。在具体编程实现时,可通过计算梯度幅值来确定。一般用sobel算子 3)检测: 经过增强的图像,往往邻域中有很多点的梯度值比较大,而在特定的应用中,这些 点并不是我们

m0_43609475的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【canny边缘检测】canny边缘检测原理及代码详解

前言 本文通过介绍canny边缘检测原理与代码解析,希望能让大家深入理解canny边缘检测 canny边缘检测算法主要流程 # 一、高斯模糊 图像去噪是进行边缘检测的第一步,通过去噪可以去除图像中的一些噪点,从而使边缘检测时免受噪点干扰。 一般去噪卷积核中心点的值由周围点像素均值决定,以3×3卷积核的8邻域为例,如下图所示,(0,0)点坐标值由周围坐标与本身的均值决定。 ![在这里插入图片描述](https://img-blog.csdn

DK_csdn1的博客 3万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Canny边缘检测算法及实现

提取图片的边缘信息是底层数字图像处理的基本任务之一.

leonardohaig的博客 1万+

[图像处理]-Canny边缘检测算法

1.问题描述 在处理图像时,有时我们需要图像的边界或通过边界得到一定的信息,如何有效而准确的找到这些边界并显示出来就了一个问题,而Canny算法则可以很好的解决它。 2.简述Canny算法 Canny 是一种 multi-stage 算法,分别如下: 高斯滤波:平滑图像,消除噪声 梯度和方向计算:利用Sobel算子计算每个像素点的梯度和方向 非极大值抑制:消除边缘检测带来的杂散相应(本来不是边缘检测出来是) 双阈值:检测真正和潜在的边缘 滞后技术:通过抑制弱边缘来完成边缘检测跟踪边界 2.1高斯滤波 本

ai_faker的博客 1万+

Canny 边缘检测算法

Canny 边缘检测算法(学习笔记)

绯雨千叶的博客 6026
上一篇: 19 - Laplace算子
下一篇: LaTeX 中插入数学公式
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值