【OpenCv 4 Python 3.7】Canny边缘检测(边缘提取)

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

Canny边缘检测的概念
OpenCV函数用于:cv2.Canny()
步骤:

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

Canny边缘检测:

是一种流行的边缘检测算法。它是由约翰·F·坎尼于1986年开发的。这是一个多阶段的算法。

1、降噪

由于边缘检测对图像中的噪声很敏感,第一步是用5x5高斯滤波器去除图像中的噪声。

2、灰度转换 - cvtColor

3、图像强度梯度的求取

然后在水平方向和垂直方向用Sobel核对平滑后的图像进行滤波,得到水平方向的一阶导数(G_x)和垂直方向(G_y)从这两幅图像中,我们可以找到每个像素的边缘梯度和方向如下:

Edge_Gradient ; (G) = \sqrt{G_x^2 + G_y^2} Angle ; (\theta) = \tan^{-1} \bigg(\frac{G_y}{G_x}\bigg)

梯度方向总是垂直于边缘。它是圆形的四个角之一,代表垂直,水平和两个对角线方向。

4、非极大抑制

在获得梯度幅值和方向后,对图像进行全面扫描,以消除可能不构成边缘的任何不需要的像素。为此,在每个像素上,检查像素是否是其邻域内沿梯度方向的局部最大值。检查下面的图像:

Non-Maximum Suppression

A点在边缘(垂直方向)。梯度方向是正常的边缘。点B和C呈梯度方向。因此,用点B和点C检查点A,看看它是否形成局部最大值。如果是,则考虑到下一阶段,否则就会被抑制(将为零)。

简而言之,你得到的结果是一幅带有“薄边”的二值图像。

5、迟滞阈值

这个阶段决定了哪些是边缘,哪些是真正的边,哪些不是边。为此,我们需要两个阈值,MinVal和MaxVal。任何强度梯度大于MaxVal肯定是边,而小于MinVal肯定是非边缘的,所以被丢弃了。处于这两个阈值之间的人根据其连通性分为边缘或非边缘。如果它们连接到“确定边缘”像素,则它们被视为边缘的一部分。否则,它们也会被丢弃。见下图:

Hysteresis Thresholding

边缘A在MaxVal,因此被认为是“确定边缘”。虽然边缘C在MaxVal下面,但是它与边A相连,因此也被认为是有效边,我们得到了这条全曲线。但是边缘B,虽然它在上面MinVal并且与边缘C的区域相同,它没有连接到任何“确定边”,因此被丢弃。所以我们必须相应地选择MinVal和MaxVal,得到正确的结果。

这一阶段也消除了小像素噪声的假设,边缘是长线。所以我们最终得到的是图像中的强边。

OpenCV中的Canny边缘检测

OpenCV将上述所有功能都放在一个函数中,cv2.Canny()。我们会看看如何使用它。第一个参数是我们的输入图像。第二个和第三个参数分别是我们的MinVal和MaxVal。第三个参数是aperture_size。它是用于查找图像梯度的Sobel核的大小。默认情况下是3。最后一个参数是L2gradient ,它指定了求梯度幅值的公式。如果是True,它使用上面提到的更精确的方程,否则它使用这个函数:Edge_Gradient ; (G) = |G_x| + |G_y|。默认情况下,它是False

代码实现:

import cv2 as cv
import numpy as np

#边缘检测
def edge_demo(image):
    #高斯模糊:降噪
    blurred = cv.GaussianBlur(image, (3, 3), 0)
    #灰度转换
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)
    # X Gradient,深度cv.CV_16SC1 整型
    xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
    # Y Gradient
    ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
    #edge
    #edge_output = cv.Canny(xgrad, ygrad, 50, 150)
    #50, 150  低阈值  高阈值
    edge_output = cv.Canny(gray, 50, 150)
    cv.imshow("Canny Edge", edge_output)
    #bitwise_and:变成彩色
    dst = cv.bitwise_and(image, image, mask=edge_output)
    cv.imshow("Color Edge", dst)


print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/topstar.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
edge_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

结果:
在这里插入图片描述

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

相关推荐

【Opencv实战】高手勿入,Python使用Opencv+Canny实现边缘检测以及轮廓检测(详细步骤+源码分享)

有温度 有深度 有广度 就等你来关注哦~在这次的案例实战中,我们将使用Python 3和OpenCV。我们将使用OpenCV,因为它是一个著名的开源计算机视觉库,其中提供了许多处理图像和视频的功能。在本次案例中,我们将使用OpenCV、Canny来进行边缘检测与轮廓检测。——边缘检测Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞后阈值化。小科普就先到这里了撒!下面我们正式开始今天的案例吧💨下面文章开始前进行详细的介绍吧

xy258009的博客 6211

python-opencv边缘检测

本章主要说明如何使用python-opencv题图图片中图案的边缘。

白羊by的博客 4618

opencv-python(13):Canny边缘检测

边缘检测的目的是识别目标数字图像上亮度变化明显的点。图像中的显著变化通常反应了属性的重要事件和变化。 函数原型: edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 必要参数: 第一个参数是需要处理的原图像,该图像必须为单通道的灰度图;第二个参数是阈值

wangleixian的博客 9104

10.5 边缘检测

边缘检测 学习目标 了解Sobel算子,Scharr算子和拉普拉斯算子 掌握canny边缘检测的原理及应用 1 原理 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。边缘的表现形式如下图所示: 图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于搜索和基于零穿越。 基于搜索:.

qq_40066957的博客 3405

OpenCV学习笔记(7)--Canny Edge Detection Canny边缘检测

    Canny 边缘检测是很流行的边缘检测算法,是在1986年由John F.Canny提出的。它是一个多级(multi-stage)算法。下面详细介绍每一级。     1.减少噪音         因为边缘检测对噪音非常敏感,所以实现边缘检测的第一步,是使用高斯滤波器对图像中的噪音进行移除。     2.寻找图像中的强度梯度(Intensity Gradient)          ...

kathrynlala的博客 9544

【OpenCV-Python】——边缘和轮廓&Laplacian/Sobel/Canny边缘检测&查找/绘制轮廓及轮廓特征&霍夫直线/圆变换

由于是初学者可能很多地方没有总结完全或者有误,后续深入学习后会不断回来该删,也欢迎各位朋友指正!下次学习直方图!

weixin_51658186的博客 6949

4、OpenCV 中的边缘检测(Python 接口)

OpenCV 提供了四种不同的边缘检测算子,或者说高通滤波器:Sobel,Scharr 和 Laplacian 算子以及Canny 算子,具体检测步骤如下: - 图像滤波:边缘检测的算法主要是基于图像灰度值的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常用的高斯平滑滤波。 - 增强边缘:可以将图像灰度点邻域值有显著变化的点凸显出来。在具体

Man 4195

opencv-python常用函数解析及参数介绍(七)——边缘检测

在之前的文章中我们介绍了使用膨胀和腐蚀、计算图像梯度的方式来获取图像的轮廓,本篇文章将介绍另外一种可以获取图像轮廓的方法——边缘检测。

艾醒的博客 1300

Python图像处理实战:从灰度转换到边缘检测的完整项目指南

图像处理作为计算机视觉的基础技术,通过算法对数字图像进行分析和增强。其核心原理是将图像表示为像素矩阵,利用数学运算实现特征提取。在工程实践中,灰度转换通过加权平均法降低数据维度,二值化技术如Otsu算法能自动确定最佳阈值,这些基础操作为高级应用奠定基础。边缘检测算法如Canny算子通过多阶段处理精确识别物体边界,轮廓提取则在此基础上实现形状分析。这些技术在文档扫描、目标识别等场景中具有重要应用价值。本文通过四个实战项目,系统讲解图像读取、灰度转换、二值化到边缘检测的完整流程,结合OpenCV和Python实

weixin_30268071的博客 432

人形机器人骨骼材料选型实战:从铝合金到碳纤维的5种方案对比

本文深入探讨人形机器人骨骼材料的选型策略,对比铝合金、镁合金、钛合金、碳纤维复合材料及3D打印材料等5种方案的性能优劣。通过建立强度-重量比、疲劳寿命等核心评价维度,结合具体应用场景,提供科学的材料决策方法论,助力开发者优化机器人结构设计,实现性能与成本的平衡。

weixin_29199873的博客 441

生信入门第七课:使用FastQC软件进行测序原始fastq数据质控

从实验到数据:RNA定量、文库片段长度、fastqc质控和fastp去接头

微生信 492

opencv python边缘检测和轮廓提取

文章目录前言一、边缘检测二、轮廓提取1.非边缘检测轮廓提取2.边缘检测和轮廓调节总结 前言 opencv中的边缘检测和轮廓提取都是图像识别的重要部分 提示:以下是本篇文章正文内容,下面案例可供参考 一、边缘检测 Canny边缘检测算子是一个多级边缘检测算法,Canny的目标是找到一个最优的边缘检测算法,其评价标准为:低错误率、高定位性、最小响应。 Canny边缘检测步骤 Canny函数 Python: edges = cv.Canny( image, threshold1, threshold2[, .

qq_47566416的博客 1万+

从DBC到ARXML:详解DaVinci Configurator中通信栈的自动化配置逻辑

本文深入解析了Vector公司DaVinci Configurator工具如何将DBC文件自动转换为符合AUTOSAR标准的ARXML配置,详细介绍了从DBC到ARXML的映射逻辑、自动化配置的边界与陷阱,以及工程实践中的优化策略。帮助工程师高效配置汽车电子系统中的通信协议,提升项目开发效率。

weixin_30279671的博客 718

OpenCV-Python (Canny边缘检测)

Canny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。它是一个多阶段的算法,即由多个步骤构成。 图像降噪 计算图像梯度 非极大值抑制 阈值筛选 原型 OpenCV-Python中Canny函数的原型为: edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L...

haohaomua的博客 1万+

Python多进程实战:用BaoStock高效下载股票历史数据的5个优化技巧

本文详细介绍了使用Python多进程技术通过BaoStock高效下载股票历史数据的5个优化技巧。从理解BaoStock的数据获取机制到进程池配置、智能任务分片、异常处理及性能监控,帮助开发者显著提升数据下载效率,特别适合量化交易领域的数据采集需求。

weixin_30369041的博客 461

LeRobot 入门教程(十一)π0(Pi0)π0.5(Pi0.5)训练、推理、部署

本文介绍了Physical Intelligence公司开发的π₀和π₀.₅系列通用机器人控制视觉-语言-动作模型。π₀作为首款基础模型,融合流匹配、跨实体训练等技术,支持50Hz高频控制。π₀.₅是其升级版,通过异构数据协同训练解决开放世界泛化问题,在Libero基准测试中表现优异。文章详细说明了两个模型的安装要求、使用方法、训练策略及关键参数配置,包括混合精度训练、梯度检查点等优化技术,为机器人在多样化场景中的语义理解和动作控制提供了完整解决方案。

2506_90492529的博客 5053

OpenCV-Python教程(8、Canny边缘检测)

本篇文章介绍如何用OpenCV-Python来使用Canny算子。 提示: 转载请详细注明原作者及出处,谢谢! 本文介绍使用OpenCV-Python实现基本的滤波处理本文不介详细的理论知识,读者可从其他资料中获取相应的背景知识。笔者推荐清华大学出版社的《图像处理与计算机视觉算法及应用(第2版) 》。 原型 OpenCV-Python中Canny函数的原型为:edge

sunny2038的专栏 12万+

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 208

OpenCV+python:Canny边缘检测算法

1,边缘处理 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知道微分运算是求信号的变化率,具有加强高频分量的作用。 在空域运算中来说,对图像的锐化就是计算微分。由于数字图像的离散信号,微分运算就变成计算差分或梯度。 图像处理中有多种边缘检测(梯度)算子,常用的包括普通一阶差分,Robert算子(交叉差分),Sobel算子等等,是基于寻找梯度强度。拉普拉斯算子(二阶差...

qq_43660987的博客 7516

RK3568平台开发系列:Android环境下CAN的使用

在RK3568平台上,我们可以利用Android环境中的API来实现CAN的使用。通过以上步骤,我们可以在Android应用中发送和接收CAN数据,并进行相应的处理。当接收到CAN数据时,将触发onMessageReceived回调方法,我们可以在这个方法中对接收到的数据进行处理。在上述代码中,我们指定了CAN的ID为0x123,数据为{0x01, 0x02, 0x03},并设置了标志位和周期。接收CAN数据需要注册一个监听器,并在监听器中处理接收到的数据。发送CAN数据需要指定CAN的ID和数据。

2301_79330513的博客 1913

双像素传感器的AI计算摄影实战:单目深度估计与图像去模糊的融合创新

本文介绍了双像素传感器技术在计算机视觉中的应用,包括深度估计、图像去模糊和图像重建等任务。双像素传感器通过两个子单元捕捉视差信息,使摄像头能够分析场景的三维结构和运动轨迹。文章以图像去模糊为例,详细展示了从数据准备到模型训练的完整流程,包括构建自定义数据集、设计双像素特征提取模块、训练去模糊模型及推理测试。通过模拟双像素的"双视角"信息融合,该AI算法能有效恢复模糊图像的清晰细节。

know_F0727的博客 256

OpenCV-Python(19):Canny边缘检测

通过调整滑动条的值,你可以实时查看Canny边缘检测的结果,这样你就会理理解阈值的重要性了,按下ESC键可退出循环。4.双阈值检测:根据设定的两个阈值(高阈值和低阈值),将像素点分为强边缘、弱边缘和非边缘三类。高于高阈值的像素点被认为是强边缘,低于低阈值的像素点被认为是非边缘,位于两者之间的像素点被认为是弱边缘。5.边缘连接:通过迭代地访问弱边缘像素,并与其相邻的强边缘像素进行连接,最终确定真正的边缘。注意:Canny边缘检测的结果通常是二值图像,其中边缘像素为白色,非边缘像素为黑色。

图灵追幕者博客录 5621

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OpenCV——Canny边缘检测

OpenCV——Canny边缘检测算法的C++与python代码实现。

点云侠的博客 6884

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

图像边缘检测与轮廓提取详解及python实现

图像边缘检测和轮廓提取是计算机视觉和图像处理中的两个核心任务。它们涉及从图像中提取物体边界、边缘或轮廓信息,帮助识别图像中的对象、形状、纹理等结构性特征。边缘检测:指通过检测图像亮度或颜色的突变(例如,像素值的急剧变化)来识别图像中的边界。边缘通常表示物体的轮廓或结构的变化。轮廓提取:是从边缘检测中提取出一个清晰的边界曲线或封闭轮廓。轮廓提取通常用于对象的检测和识别,尤其在形态学操作中有着重要应用。图像边缘检测与轮廓提取是计算机视觉领域中不可或缺的技术,广泛应用于图像分析、目标检测、医学影像分析等多种场景。

闲人编程的博客 4646

WINCC7.3破解文件

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

Canny边缘检测

opencv python 边缘检测

weixin_45931455的博客 1万+

Opencv中的Canny边缘检测

Opencv中的Canny边缘检测

Keep_Trying_Go的博客 5235
上一篇: 【OpenCv 4 Python 3.7】图像梯度,图像边界
下一篇: 【pytorch】安装对应版本【torchvision】以及torchvision安装(pytorch 1.0.0 --->torchvision 0.2.2)
YL_python_C++_java
博客等级 码龄7年 1392粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值