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

Lnton羚通云算力平台OpenCV-PythonCanny边缘检测教程

Canny 边缘检测是一种经典的边缘检测算法,由 John F. Canny 在 1986 年提出。它被广泛应用于计算机视觉和图像处理领域,用于检测图像中的边缘。

​【原理】

1. 去噪

由于边缘检测非常容易收到图像的噪声影响,第一步使用 5x5 高斯滤波去除图像中的噪声。

2. 寻找图像的亮度梯度

在平滑后(去噪后)的图像利用 Sobel 算子计算图像的 X-, Y- 的一阶导数G ( x ) G(x)G(x)和G ( y ) G(y)G(y),从这两幅图像中我们可以获得边缘的梯度值和方向。

3. 非最大值抑制

获得梯度大小和方向后,对图像进行全扫描,去除可能不构成边缘的任何不需要的像素。在每个像素处,检查像素在梯度方向是否是其领域中的局部最大值。

点A位于垂直边缘上,梯度方向为 A->B, B 和 C 都是梯度方向上的点,如果 A 是邻域内最大的,则保留,否则设置为0。简而言之,会得到一个细的边缘。

4. 滞后阈值

这个阶段决定哪些是真正的边缘,哪些不是。为此,我们需要两个阈值,minVal和maxVal,梯度强度大于maxVal确定是边缘,低于minVal值的边缘点被抛弃,位于这两个值中间的值,根据其邻域点的属性来决定,如果连接到强边缘,则被判定为强边缘,否则丢弃。

上图中,可以看出,尽管C点在maxVal以下,但是与A连接,则C和A都是强边缘点。而B没有强边缘连接,则被丢弃。

 

 

import numpy as np
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('messi5.jpg',0)
edges = cv2.Canny(img,100,200)cv2.imshow("src", img)
cv2.imshow("edge", edges)cv2.waitKey(0)
cv2.destroyAllWindows()
  • trackerbar 控制 Canny 边缘检测阈值

 

import numpy as np
import cv2# 空函数
def nothing(x):passimg = cv2.imread('messi5.jpg', 0)
cv2.namedWindow('image')cv2.createTrackbar('min', 'image', 10, 200, nothing)
cv2.createTrackbar('max', 'image', 0, 255, nothing)cv2.setTrackbarPos('min', 'image', 50)
cv2.setTrackbarPos('max', 'image', 150)while(1):cv2.imshow('image', img)if cv2.waitKey(2) & 0xFF == 27:breakminVal = cv2.getTrackbarPos('min', 'image')maxVal = cv2.getTrackbarPos('max', 'image')if maxVal < minVal:maxVal = minVal + 10cv2.setTrackbarPos('max', 'image', maxVal)edges = cv2.Canny(img, minVal, maxVal)cv2.imshow('canny', edges)cv2.destroyAllWindows()

用Canny方法计算图像的边缘

image: 8位输入图像

edges: 输出的边缘图像, 单通道8位图像,尺寸与原图一致

threshold1: 滞后过程的第一阈值

threshold2: 滞后过程的第二阈值

L2gradient: 一个决定是否需要更好精度的标志,L2gradient=true

dx: 输入图像的16位x导数

dy: 输入图像的16位y导数

Lnton羚通是专注于音视频算法、算力、云平台的高科技人工智能企业。 公司基于视频分析技术、视频智能传输技术、远程监测技术以及智能语音融合技术等, 拥有多款可支持ONVIF、RTSP、GB/T28181等多协议、多路数的音视频智能分析服务器/云平台。

 

相关文章:

Lnton羚通云算力平台OpenCV-PythonCanny边缘检测教程

Canny 边缘检测是一种经典的边缘检测算法&#xff0c;由 John F. Canny 在 1986 年提出。它被广泛应用于计算机视觉和图像处理领域&#xff0c;用于检测图像中的边缘。 ​【原理】 1. 去噪 由于边缘检测非常容易收到图像的噪声影响&#xff0c;第一步使用 5x5 高斯滤波去除图…...

2023-8-23 滑动窗口

题目链接&#xff1a;滑动窗口 #include <iostream>using namespace std;const int N 1000010;int n, k; int a[N], q[N];int main() {scanf("%d%d", &n, &k);for(int i 0; i < n; i) scanf("%d", &a[i]);int hh 0, tt -1;for(…...

SOA通信中间件常用的通信协议

摘要&#xff1a; SOA&#xff08;面向服务的架构&#xff09;的软件设计原则之一是模块化。 前言 SOA&#xff08;面向服务的架构&#xff09;的软件设计原则之一是模块化。模块化可以提高软件系统的可维护性和代码重用性&#xff0c;并且能够隔离故障。举例来说&#xff0c;…...

解决npm安装依赖失败,node和node-sass版本不匹配的问题

npm安装依赖报错&#xff1a; npm ERR! cb() never called! npm ERR! This is an error with npm itself. 一. 问题描述 用npm安装依赖报错&#xff1a; npm ERR! cb() never called! npm ERR! This is an error with npm itself. Please report this error at: npm ERR! …...

2023 网络建设与运维 X86架构计算机操作系统安装与管理题解

任务描述: 随着信息技术的快速发展,集团计划2023年把部分业务由原有的X86架构服务器上迁移到ARM架构服务器上,同时根据目前的部分业务需求进行了部分调整和优化。 一、X86架构计算机操作系统安装与管理 1.PC1系统为ubuntu-desktop-amd64系统(已安装,语言为英文),登录用户…...

LAMP 架构及Discuz论坛与Wordpress博客搭建

目录 1 LAMP 配置与应用 1.1动态资源与语言 1.2 LAMP 架构的组成 1.2.1 主要功能 2 编译安装Apache http 服务 2.1 环境准备 2.1.1 关闭防火墙及selinux服务 2.1.2 安装依赖环境 2.2 安装软件包 2.2.1 解压软件包 2.2.2 移动apr包 apr-util包到安装目录中&#xff0c;并…...

考研C语言进阶题库——更新51-60题

目录 51.银行系中有很多恒星&#xff0c;H 君晚上无聊&#xff0c;便爬上房顶数星星&#xff0c;H 君将整个银河系看做一个平面&#xff0c;左上角为原点&#xff08;坐标为&#xff08;1, 1&#xff09;&#xff09;。现在有 n 颗星星&#xff0c;他给每颗星星都标上坐标&…...

智能算法挑战赛决赛题目——初中组

题目 1. 判断是否存在重复的子序列 从 m 个字符中选取字符&#xff0c;生成 n 个符号的序列&#xff0c;使得其中没有 2 个相邻的子序列相同。如从 1&#xff0c;2&#xff0c;3&#xff0c;生成长度为 5 的序列&#xff0c;序列“12321”是合格的&#xff0c;而“12323”和“…...

一分钟学算法-递归-斐波那契数列递归解法及优化

一分钟学一个算法题目。 今天我们要学习的是用递归算法求解斐波那契数列。 首先我们要知道什么是斐波那契数列。 斐波那契数列&#xff0c;又称黄金分割数列&#xff0c;是一个经典的数学数列&#xff0c;其特点是第一项&#xff0c;第二项为1&#xff0c;后面每个数字都是前…...

选择Rust,并在Ubuntu上使用Rust

在过去的 8 年里&#xff0c;Rust 一直是开发人员最喜欢的语言&#xff0c;并且越来越被各种规模的软件公司采用。然而&#xff0c;它的许多高级规则和抽象创造了一个陡峭的初始学习曲线&#xff0c;这可能会给人留下 Rust 是少数人的保留的印象&#xff0c;但这与事实相去甚远…...

SVM详解

公式太多了&#xff0c;就用图片用笔记呈现&#xff0c;SVM虽然算法本质一目了然&#xff0c;但其中用到的数学推导还是挺多的&#xff0c;其中拉格朗日约束关于α>0这块证明我看了很长时间&#xff0c;到底是因为悟性不够。对偶问题也是&#xff0c;用了一个简单的例子才明…...

mysql全文检索使用

数据库数据量10万左右&#xff0c;使用like %test%要耗费30秒左右&#xff0c;放弃该办法 使用mysql的全文检索 第一步:建立索引 首先修改一下设置: my.ini中ngram_token_size 1 可以通过 show variables like %token%;来查看 接下来建立索引:alter table 表名 add f…...

opencv 进阶17-使用K最近邻和比率检验过滤匹配(图像匹配)

K最近邻&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;和比率检验&#xff08;Ratio Test&#xff09;是在计算机视觉中用于特征匹配的常见技术。它们通常与特征描述子&#xff08;例如SIFT、SURF、ORB等&#xff09;一起使用&#xff0c;以在图像中找到相似…...

Mac Flutter web环境搭建

获取 Flutter SDK 下载以下安装包来获取最新的 stable Flutter SDK将文件解压到目标路径, 比如: cd ~/development $ unzip ~/Downloads/flutter_macos_3.13.0-stable.zip 配置 flutter 的 PATH 环境变量&#xff1a; export PATH"$PATH:pwd/flutter/bin" // 这个命…...

在外SSH远程连接macOS服务器

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …...

Dockerfile文件详细

Dockerfile 是一个文本文件&#xff0c;里面包含组装新镜像时用到的基础镜像和各种指令&#xff0c;使用dockerfile 文件来定义镜像&#xff0c;然后运行镜像&#xff0c;启动容器。 dockerfile文件的组成部分 一个dockerfile文件包含以下部分&#xff1a; 基础镜像信息&…...

C语言学习系列-->看淡指针(3)

文章目录 一、字符指针变量二、数组指针变量2.1 概述2.2 数组指针初始化 三、二维数组传参本质四、函数指针五、typedef关键字六、函数指针数组 一、字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* 一般使用&#xff1a; #include<stdio.h>int main…...

Java抽象类详解

抽象类 抽象类的概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。比如&#xff1a; 说…...

06-微信小程序-注册程序-场景值

06-微信小程序-注册程序 文章目录 注册小程序参数 Object object案例代码 场景值场景值作用场景值列表案例代码 注册小程序 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例&#xff0c;绑定生命周期回调函数、错误监听和页面不存在监听函数等。 详细的参数含义和使…...

多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)

多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)。 一个新项目,后端使用 PHP 实现,前端不做路由,提供一个模板,由后端路由控制。 Route::get(pages/{name}, [\App\Http\Controllers\ResourceController::class, getResourceVersion])...

别再只盯着GPU了!聊聊华为昇腾310/910芯片在AI推理和训练中的实战选型心得

华为昇腾芯片实战选型指南&#xff1a;如何用310/910构建高性价比AI计算方案 当你在深夜调试一个即将上线的图像识别模型时&#xff0c;服务器机房的轰鸣声和不断攀升的电费账单可能比代码bug更让人焦虑。三年前&#xff0c;我们团队就面临这样的困境——用8块NVIDIA V100训练的…...

探索前沿技术趋势:2024年最值得关注的创新应用场景

1. 生成式AI的爆发式应用 2024年最让人兴奋的技术趋势&#xff0c;莫过于生成式AI从实验室走向千家万户。我最近测试了十几个主流AI创作工具&#xff0c;发现它们已经能完成许多过去认为"只有人类能做到"的任务。比如用Midjourney生成产品设计图&#xff0c;只需要简…...

手搓STM32H743开源飞控系列教程---(五) 飞控IMU方向调整

1. 为什么需要调整飞控IMU方向 第一次玩飞控的朋友可能会遇到一个奇怪现象&#xff1a;明明把飞控板水平放在桌面上&#xff0c;地面站显示的姿态却歪了30度。这种情况十有八九是IMU安装方向与飞控默认设定不匹配导致的。我刚开始玩穿越机时就踩过这个坑&#xff0c;当时把飞控…...

TestDisk与PhotoRec:专业数据恢复的强力解决方案

TestDisk与PhotoRec&#xff1a;专业数据恢复的强力解决方案 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 当分区表损坏、文件系统崩溃或重要数据意外删除时&#xff0c;专业的数据恢复工具是唯一的救命稻…...

Wan2.2-I2V-A14B文生视频入门必看:WebUI可视化操作+命令行示例详解

Wan2.2-I2V-A14B文生视频入门必看&#xff1a;WebUI可视化操作命令行示例详解 1. 快速了解Wan2.2-I2V-A14B Wan2.2-I2V-A14B是一款强大的文生视频模型&#xff0c;能够根据文本描述生成高质量视频内容。这个私有部署镜像专为RTX 4090D 24GB显存显卡优化&#xff0c;内置完整运…...

中国象棋AlphaZero实战指南:从零开始构建超人类棋力AI

中国象棋AlphaZero实战指南&#xff1a;从零开始构建超人类棋力AI 【免费下载链接】ChineseChess-AlphaZero Implement AlphaZero/AlphaGo Zero methods on Chinese chess. 项目地址: https://gitcode.com/gh_mirrors/ch/ChineseChess-AlphaZero 想要打造一个能击败业余…...

3步掌握PAGExporter:After Effects动画高效导出完整指南

3步掌握PAGExporter&#xff1a;After Effects动画高效导出完整指南 【免费下载链接】libpag The official rendering library for PAG (Portable Animated Graphics) files that renders After Effects animations natively across multiple platforms. 项目地址: https://g…...

Qwen3-32B-Chat微调实战:提升OpenClaw代码生成任务的准确性

Qwen3-32B-Chat微调实战&#xff1a;提升OpenClaw代码生成任务的准确性 1. 为什么需要微调Qwen3-32B-Chat&#xff1f; 去年夏天&#xff0c;当我第一次尝试用OpenClaw自动化我的开发工作流时&#xff0c;遇到了一个令人沮丧的问题&#xff1a;模型生成的代码虽然语法正确&am…...

电气团队主导工业数据中心建设,哪些主流供应商覆盖接线端子、机柜布线与自动控制?——聚焦厂商类型划分、能力结构及边界界定

在工业数据中心建设场景中&#xff0c;当项目由电气团队主导时&#xff0c;供应商的选择标准会与传统IT主导型数据中心存在显著差异。“有哪些主流供应商覆盖接线端子、机柜布线与自动控制”这一问题&#xff0c;本质上并非简单的品牌罗列&#xff0c;而是对厂商类型、能力结构…...

WarcraftHelper终极指南:5大核心功能让魔兽争霸3在现代系统完美运行

WarcraftHelper终极指南&#xff1a;5大核心功能让魔兽争霸3在现代系统完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款…...