当前位置: 首页 > news >正文

opencv - py_imgproc - py_canny Canny边缘检测

文章目录

  • Canny 边缘检测
    • 目标
    • 理论
    • OpenCV 中的 Canny 边缘检测
    • 其他资源

Canny 边缘检测

目标

在本章中,我们将学习

  • Canny 边缘检测的概念
  • 用于该目的的 OpenCV 函数:cv.Canny()

理论

Canny 边缘检测是一种流行的边缘检测算法。它由 John F. Canny 于1986 年开发。它是一种多阶段算法,我们将介绍每个阶段。

  • 降噪

由于边缘检测容易受到图像中噪声的影响,因此第一步是使用 5x5 高斯滤波器去除图像中的噪声。我们已经在前面的章节中看到过这一点。

  • 查找图像的强度梯度

然后用 Sobel 核在水平和垂直方向上对平滑的图像进行过滤,以获得水平方向 ( G x G_x Gx) 和垂直方向 ( G y G_y Gy) 的一阶导数。从这两个图像中,我们可以找到每个像素的边缘梯度和方向,如下所示:

[ E d g e _ G r a d i e n t ( G ) = G x 2 + G y 2 A n g l e ( θ ) = tan ⁡ − 1 ( G y G x ) ] [ Edge\_Gradient \; (G) = \sqrt{G_x^2 + G_y^2} \\ Angle \; (\theta) = \tan^{-1} \bigg(\frac{G_y}{G_x}\bigg) ] [Edge_Gradient(G)=Gx2+Gy2 Angle(θ)=tan1(GxGy)]

梯度方向始终垂直于边缘。它被四舍五入为四个角度之一,代表垂直、水平和两个对角线方向。

  • 非最大值抑制

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

在这里插入图片描述

点 A 在边缘上(垂直方向)。梯度方向垂直于边缘。点 B和 C 在梯度方向上。因此,检查点 A 与点 B 和 C 是否形成局部最大值。如果是,则将其考虑用于下一阶段,否则,将其抑制(置为零)。

简而言之,您得到的结果是具有“薄边缘”的二值图像。

  • 滞后阈值

此阶段决定哪些边缘是真正的边缘,哪些不是。为此,我们需要两个阈值,minVal 和 maxVal。强度梯度大于 maxVal 的任何边都必定是边,低于 minVal 的边必定是非边,因此被丢弃。介于这两个阈值之间的边根据其连通性被分类为边或非边。如果它们连接到“确定边”像素,则它们被视为边的一部分。否则,它们也会被丢弃。
见下图:

在这里插入图片描述

边 A 高于 maxVal,因此被视为“确定边”。虽然边 C 低于 maxVal,但它连接到边 A,因此也被视为有效边,我们得到了完整的曲线。但是边 B,虽然它高于 minVal 并且与边 C 位于同一区域,但它没有连接到任何“确定边”,因此被丢弃。因此,我们必须相应地选择 minVal 和 maxVal,以获得正确的结果,这一点非常重要。

此阶段还会在假设边缘为长线的情况下消除小像素噪声。

因此,我们最终得到的是图像中的强边缘。

OpenCV 中的 Canny 边缘检测

OpenCV 将上述所有内容放在一个函数 cv.Canny() 中。我们将了解如何使用它。
第一个参数是我们的输入图像。
第二个和第三个参数分别是我们的 minVal 和 maxVal。
第四个参数是aperture_size。它是用于查找图像梯度的 Sobel 核的大小。默认情况下为 3。
最后一个参数是 L2gradient,它指定用于查找梯度幅度的方程。如果它为 True,则使用上面提到的更准确的方程,否则它使用此函数: E d g e _ G r a d i e n t ( G ) = ∣ G x ∣ + ∣ G y ∣ Edge\_Gradient \; (G) = |G_x| + |G_y| Edge_Gradient(G)=Gx+Gy。默认情况下,它是False。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as pltimg = cv.imread('messi5.jpg',0)
edges = cv.Canny(img,100,200)plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])plt.show()

请参阅以下结果:

在这里插入图片描述

其他资源

  • 维基百科 上的 Canny 边缘检测器
  • Canny 边缘检测教程,作者:Bill Green,2002 年。

相关文章:

opencv - py_imgproc - py_canny Canny边缘检测

文章目录 Canny 边缘检测目标理论OpenCV 中的 Canny 边缘检测其他资源 Canny 边缘检测 目标 在本章中,我们将学习 Canny 边缘检测的概念用于该目的的 OpenCV 函数:cv.Canny() 理论 Canny 边缘检测是一种流行的边缘检测算法。它由 John F. Canny 于1…...

Spring Boot 创建项目详细介绍

上篇文章简单介绍了 Spring Boot(Spring Boot 详细简介!),还没看到的读者,建议看看。 下面,介绍一下如何创建一个 Spring Boot 项目,以及自动生成的目录文件作用。 Maven 构建项目 访问 http…...

70B的模型需要多少张A10的卡可以部署成功,如果使用vLLM

部署一个 70B 的模型(如 defog/sqlcoder-70b-alpha)通常需要考虑多个因素,包括模型的内存需求和你的 GPU 配置。 1. 模型内存需求 大约计算,一个 70B 参数的模型在使用 FP16 精度时大约需要 280 GB 的 GPU 内存。对于 A10 GPU&a…...

clickhouse配置用户角色与权限

首先找到user.xml文件&#xff0c;默认在/etc/clickhouse-server路径下 一、配置角色 找到标签定义 <aaaa><readonly>1</readonly><allow_dll>0</allow_dll> </aaaa>其中aaaa为角色名称&#xff0c;readonly为只读权限&#xff08;0–代表…...

面试题整理 4

总结整理了某公司面试中值得记录的笔试和问到的问题和答案。 目录 PHP传值和传引用区别&#xff1f;什么情况下用传值&#xff1f;什么情况下用传引用&#xff1f; 传值 传引用 区别 选择传值还是传引用时 简述PHP的垃圾回收机制 二维数组排序 什么是CSRF攻击&#xff…...

React基础大全

文章目录 一、React基本介绍1.虚拟DOM优化1.1 原生JS渲染页面1.2 React渲染页面 2.需要提前掌握的JS知识 二、入门1.React基本使用2.创建DOM的两种方式2.1 使用js创建&#xff08;一般不用&#xff09;2.2 使用jsx创建 3.React JSX3.1 JSX常见语法规则3.2 for循环渲染数据 4.模…...

51c大模型~合集10

我自己的原文哦~ https://blog.51cto.com/whaosoft/11547799 #Llama 3.1 美国太平洋时间 7 月 23 日&#xff0c;Meta 公司发布了其最新的 AI 模型 Llama 3.1&#xff0c;这是一个里程碑时刻。Llama 3.1 的发布让我们看到了开源 LLM 有与闭源 LLM 一较高下的能力。 Meta 表…...

【已解决】element-plus配置主题色后,sass兼容问题。set-color-mix-level() is...in Dart Sass 3

项目&#xff1a;vue3vite "scripts": {"dev": "vite","build": "vite build","preview": "vite preview"},"dependencies": {"element-plus/icons-vue": "^2.3.1",&quo…...

JavaWeb——Web入门(4/9)-HTTP协议:请求协议(请求行、请求头、请求体、演示 )

目录 请求协议概述 请求行 请求头 请求体 演示 GET POST 请求协议概述 介绍完了 HTTP 协议的概念以及特点之后&#xff0c;接下来介绍 HTTP 当中的请求协议。 请求协议指的就是请求数据的格式。 HTTP 请求协议在整个 Web 通信中起着至关重要的作用。当用户在浏览器…...

软考:数据库考点总结

结构冲突 在数据库领域&#xff0c;冲突主要指的是在并发操作中&#xff0c;多个事务试图同时访问或修改相同的数据资源&#xff0c;导致数据一致性、完整性和隔离性受到威胁。以下是数据库中常见的几种冲突类型&#xff1a; 读写冲突&#xff08;Read-Write Conflict&#xf…...

Flash的语音ic型号有哪些?

深圳唯创知音电子有限公司在语音技术领域具有深厚的积累&#xff0c;其Flash语音IC产品凭借高性能和广泛的应用领域&#xff0c;在市场上占据了一席之地。以下是对该公司Flash语音IC产品的详细介绍&#xff1a; 一、产品概述 Flash语音IC是一种采用Flash存储技术的语音芯片&…...

10天进阶webpack---(1)为什么要有webpack

首先就是我们的代码是运行在浏览器上的&#xff0c;但是我们开发大多都是利用node进行开发的&#xff0c;在浏览器中并没有node提供的那些环境。这就早成了运行和开发上的不同步问题。 -----引言 浏览器模块化的问题&#xff1a; 效率问题&#xff1a;精细的模块划分带来了更…...

HTML CSS

目录 1. 什么是HTML 2. 什么是CSS ? 3. 基础标签 & 样式 3.1 新浪新闻-标题实现 3.1.1 标题排版 3.1.1.1 分析 3.1.1.2 标签 3.1.1.3 实现 3.1.2 标题样式 3.1.2.1 CSS引入方式 3.1.2.2 颜色表示 3.1.2.3 标题字体颜色 3.1.2.4 CSS选择器 3.1.2.5 发布时间字…...

第03章 MySQL的简单使用命令

一、MySQL的登录 1.1 服务的启动与停止 MySQL安装完毕之后&#xff0c;需要启动服务器进程&#xff0c;不然客户端无法连接数据库。 在前面的配置过程中&#xff0c;已经将MySQL安装为Windows服务&#xff0c;并且勾选当Windows启动、停止时&#xff0c;MySQL也 自动启动、停止…...

【C++动态规划】2435. 矩阵中和能被 K 整除的路径|1951

本文涉及知识点 C动态规划 LeetCode2435. 矩阵中和能被 K 整除的路径 给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发&#xff0c;每一步只能往 下 或者往 右 &#xff0c;你想要到达终点 (m - 1, n - 1) 。 请你返回路径和能被 k 整除的…...

三、Kafka集群

一、Kafka集群的概念 1、目的 高并发、高可用、动态扩展。 主备数据架构、双活节点、灾备数据中心。 如果是服务的地理范围过大也可以使不同的集群节点服务不同的区域&#xff0c;降低网络延迟。 2、Kafka集群的基本概念 1&#xff09;复制&#xff08;镜像&#xff09; kaf…...

[数据结构]堆

堆&#xff0c;本质是一颗完全二叉树。属于非线性结构。 代码实现可参考树的代码。 函数介绍: //此堆是小堆,大堆操作部分与小堆相反 void InitHeap(Heap* cat) {assert(cat);cat->arr NULL;cat->capacity cat->size 0; } void DestroyHeap(Heap* cat) {assert(…...

UDP-鼠李糖合成酶基因的克隆与鉴定-文献精读76

何首乌中UDP-鼠李糖合成酶基因FmRHM1/2的克隆与鉴定 摘要 UDP-鼠李糖是一种由UDP-鼠李糖合酶&#xff08;RHM&#xff09;催化合成的鼠李糖供体&#xff0c;而鼠李糖是鼠李糖苷化合物的重要组成部分&#xff0c;植物中只有少数基因编码的酶参与UDP-鼠李糖生物合成。本研究基于…...

【H2O2|全栈】JS进阶知识(四)Ajax

目录 前言 开篇语 准备工作 基本概念 原生JS使用AJAX 创建AJAX对象 设置请求方式和地址 设置请求头 发送请求 get方式发送 post方式发送 获取响应数据 AJAX状态码和HTTP状态消息 错误捕获 原生JS封装AJAX方法 $ 调用AJAX方法 结束语 前言 开篇语 本系列博客…...

Spring IOC的工作流程

Spring IOC的工作流程 好的&#xff0c;这个问题我会从几个方面来回答。 IOC是什么 Bean的声明方式 IOC的工作流程 IOC的全称是 Inversion Of Control,也就是控制反转&#xff0c;它的核心思想是把对象的管理权限交给容器。&#xff08;展示图 1&#xff09; &…...

7个效率倍增技巧:StarRailAssistant自动化工具解放崩坏星穹铁道玩家双手

7个效率倍增技巧&#xff1a;StarRailAssistant自动化工具解放崩坏星穹铁道玩家双手 【免费下载链接】StarRailAssistant 崩坏&#xff1a;星穹铁道自动化 | 崩坏&#xff1a;星穹铁道自动锄大地 | 崩坏&#xff1a;星穹铁道锄大地 | 自动锄大地 | 基于模拟按键 项目地址: ht…...

3D重建效率革命:从单张图片到高质量模型的全流程指南

3D重建效率革命&#xff1a;从单张图片到高质量模型的全流程指南 【免费下载链接】TripoSR 项目地址: https://gitcode.com/GitHub_Trending/tr/TripoSR 在数字内容创作领域&#xff0c;3D建模长期面临两大核心痛点&#xff1a;一方面&#xff0c;传统3D建模软件如Blen…...

基于COMSOL光学仿真的光子晶体光纤与微纳光学研究

comsol光学仿真光子晶体光纤&#xff0c;comsol光学方方向COMLOS微纳光学&#xff0c;仿真双芯光子晶体光&#xff0c;锥形光纤 光子晶体光光纤滤波器等&#xff0c;bpm&#xff0c;rsoft&#xff0c;fullware&#xff0c;论文复现在光学仿真领域&#xff0c;COMSOL Multiphysi…...

GLM-OCR与Transformer架构解析:从原理到高效部署

GLM-OCR与Transformer架构解析&#xff1a;从原理到高效部署 你是不是也好奇&#xff0c;那些能“看懂”图片里文字的AI&#xff0c;比如GLM-OCR&#xff0c;到底是怎么工作的&#xff1f;它凭什么能在一张复杂的海报里&#xff0c;准确无误地把文字抠出来&#xff0c;还能理解…...

华为 eNSP 实战:SSH 密钥认证配置与安全加固指南

1. 为什么选择SSH密钥认证而非密码&#xff1f; 在华为eNSP模拟的企业网络环境中&#xff0c;传统的SSH密码认证虽然比Telnet安全&#xff0c;但依然存在被暴力破解的风险。我曾在实际项目中发现&#xff0c;使用弱密码的设备在暴露公网后&#xff0c;平均每天会遭受上千次登录…...

CGAL Point_set_processing 点集处理函数自查表

参考来源&#xff1a; CGAL 6.1.1 - Point Set Processing: Algorithms 一、尺度 / K 值估算 返回值函数名作用用法示例size_testimate_global_k_neighbor_scale估算全局最优 K 邻域estimate_global_k_neighbor_scale(points)FTestimate_global_range_scale估算全局最优搜索…...

[深度解析] 突破壁垒:Free-NTFS-for-Mac实现跨平台文件系统无缝协作

[深度解析] 突破壁垒&#xff1a;Free-NTFS-for-Mac实现跨平台文件系统无缝协作 【免费下载链接】Free-NTFS-for-Mac Nigate&#xff0c;一款支持苹果芯片的Free NTFS for Mac小工具软件。NTFS R/W for macOS. Support Intel/Apple Silicon now. 项目地址: https://gitcode.c…...

大模型推理中Prefill与Decode、KV Cache三者说明

大语言模型推理基于自回归生成范式&#xff0c;严格分为 Prefill&#xff08;预填充&#xff09; 与 Decode&#xff08;解码&#xff09; 两个阶段。二者在计算形态、访存特征、硬件瓶颈上存在本质差异。KV Cache&#xff08;键值缓存&#xff09; 是实现两阶段衔接、消除重复…...

93%记忆精度的颠覆性突破:智能记忆系统如何重构AI认知能力

93%记忆精度的颠覆性突破&#xff1a;智能记忆系统如何重构AI认知能力 【免费下载链接】EverOS EverMemOS is an open-source, enterprise-grade intelligent memory system. Our mission is to build AI memory that never forgets, making every conversation built on previ…...

PPTist:5分钟掌握专业级在线PPT制作,免费开源的高效演示解决方案

PPTist&#xff1a;5分钟掌握专业级在线PPT制作&#xff0c;免费开源的高效演示解决方案 【免费下载链接】PPTist 基于 Vue3.x TypeScript 的在线演示文稿&#xff08;幻灯片&#xff09;应用&#xff0c;还原了大部分 Office PowerPoint 常用功能&#xff0c;实现在线PPT的编…...