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

25.OpenCV中的霍夫圆变换

OpenCV中的霍夫圆变换

在图像处理与计算机视觉中,圆形检测是一项常见的任务,应用场景包括车牌识别、瞳孔检测、交通标志识别等。霍夫圆变换(Hough Circle Transform)是一种高效且鲁棒的算法,通过在参数空间中寻找局部极大值,能够在存在噪声和部分遮挡的情况下检测出图像中的圆形。

本文将从基本理论、参数空间构造、算法实现步骤、以及 OpenCV C++ 中的代码示例几方面详细介绍霍夫圆变换也算为上一篇:霍夫直线检测的内容补充。

1. 霍夫圆变换简介

1.1 基本概念

传统的圆可以用中心坐标 ( a , b ) (a,b) (a,b) 和半径 r r r表示,其标准方程为:

( x − a ) 2 + ( y − b ) 2 = r 2 (x-a)^2+(y-b)^2=r^2 (xa)2+(yb)2=r2

在图像中,圆上的每个边缘点都满足上述方程。因此,霍夫圆变换的核心思想是:

  • 边缘点投票:利用检测到的边缘点,将每个点对所有可能的圆参数 ( a , b , r ) (a,b,r) (a,b,r)进行“投票”。
  • 参数累加器:在三维参数空间上(或采用分阶段处理,将半径单独处理)构建累加器,对满足圆方程的参数组合进行计数。
  • 寻找峰值:当累加器中某个区域的投票数超过预设阈值时,就可以认为参数对应的圆存在于图像中。

这种方法相较于遍历图像上所有可能的圆,具有更高的效率和鲁棒性。

1.2 参数空间的构造

参数方程:

x = a + r c o s ( θ ) ; y = b + r s i n ( θ ) x=a+rcos(\theta);y=b+rsin(\theta) x=a+rcos(θ);y=b+rsin(θ)

换种写法:

a = x − r c o s ( θ ) ; b = y − r s i n ( θ ) a=x-rcos(\theta);b=y-rsin(\theta) a=xrcos(θ);b=yrsin(θ)

对于圆形检测,其参数空间为三维空间 ( a , b , r ) (a,b,r) (a,b,r),所以在abr组成的三维坐标系中,一个点可以确定一个圆。在xy坐标系中同一个圆上的所有点的圆方程式一样的,它们转到参数方程abr坐标系中为同一个点。所以在abr坐标系中,圆上的所有像素点应该相交。通过累计相交数量确定圆。如下图:

在这里插入图片描述

在实际实现中,由于直接使用三维累加器计算量较大,为了加速处理通常会进行如下处理:

  • 预先边缘检测:例如使用 Canny 算子,降低噪声干扰。
  • 使用梯度信息:利用边缘点的梯度方向,有助于估计圆心位置,从而减少参数空间的搜索范围。
  • 多尺度搜索:根据期望目标的大小范围,对半径 r 进行分层处理或限定搜索范围。

2. 算法实现步骤

霍夫圆变换的基本流程可概括为以下步骤:

  1. 预处理
    • 灰度转换:将彩色图像转为灰度图。
    • 平滑滤波:使用高斯模糊减少图像噪声,以提高边缘检测效果。
  2. 边缘检测
    • 利用 Canny 算子提取图像中的边缘信息,从而获得候选的圆上点。
  3. 梯度和投票
    • 对于每个边缘点,根据梯度方向估计可能的圆心位置。
    • 在参数空间中对每个候选的 ( a , b , r ) (a,b,r) (a,b,r)位置进行累加投票。
  4. 累加器峰值检测
    • 统计累加器中每个参数组合的票数,找出局部最大值区域,认为这些区域对应图像中的圆。
  5. 结果输出
    • 将检测到的圆的参数进行输出,并在图像中绘制出圆心和圆边。

3. OpenCV 中的实现:HoughCircles

OpenCV 封装了上述原理,通过函数 HoughCircles 直接进行圆形检测。下面我们介绍该函数的主要参数及使用方法。

3.1 函数原型及参数说明

cpp
复制编辑
void HoughCircles(InputArray image,OutputArray circles,int method,double dp,double minDist,double param1 = 100,double param2 = 100,int minRadius = 0,int maxRadius = 0
);
  • image:输入图像,通常为经过灰度化与高斯模糊后的图像。
  • circles:输出的圆信息,每个圆用三个值表示 ( x , y , r ) (x,y,r) (x,y,r),其中 ( x , y ) (x,y) (x,y) 为圆心坐标, r r r 为半径。
  • method:检测方法,目前支持 HOUGH_GRADIENT
  • dp:累加器分辨率与原始图像分辨率的反比(例如,设 dp=1 表示累加器与图像同一分辨率)。
  • minDist:检测到的圆之间的最小距离,防止检测到重复圆。
  • param1:用于 Canny 边缘检测的高阈值(低阈值一般为其一半)。
  • param2:累加器阈值,值越小,检测到的圆越多,但可能伴随误检。
  • minRadiusmaxRadius:待检测圆的半径最大最小范围,用于限制搜索空间。

4. OpenCV C++ 示例代码

下面是一段使用 HoughCircles 进行圆形检测的完整示例代码,帮助你快速上手使用霍夫圆变换:


#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{// 1. 读取图像并预处理Mat src = imread("E:/image/coin.png");if (src.empty()){cout << "无法加载图像!" << endl;return -1;}// 转换为灰度图Mat gray;cvtColor(src, gray, COLOR_BGR2GRAY);Mat cannyDst;// 使用Canny边缘检测// 使用高斯模糊以减少噪声GaussianBlur(gray, gray, Size(9, 9), 2, 2);Canny(gray, cannyDst, 100, 150);imshow("gray",gray);// 2. 使用霍夫圆变换检测圆形vector<Vec3f> circles;HoughCircles(gray, circles, HOUGH_GRADIENT,1,                // dp: 累加器分辨率60,      // minDist: 圆心之间的最小距离150,              // param1: Canny高阈值95,               // param2: 累加器阈值(阈值越低检测越多圆)3,                // minRadius: 最小圆半径0);               // maxRadius: 最大圆半径// 3. 绘制检测到的圆Mat result = src.clone();for (size_t i = 0; i < circles.size(); i++){// circles[i] 为 (x, y, r)Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));int radius = cvRound(circles[i][2]);// 绘制圆心(小圆)circle(result, center, 3, Scalar(0, 255, 0), -1);// 绘制圆的边缘circle(result, center, radius, Scalar(0, 0, 255), 2);}// 显示结果imshow("canny", cannyDst);imshow("霍夫圆变换检测", result);waitKey(0);return 0;
}

代码说明:

  • 预处理阶段中,图像先经过灰度转换再使用高斯模糊,有助于减少噪声影响。
  • 调用 HoughCircles 时传入合适的参数,其中 dp 设置为 1 表示累加器与输入图像分辨率相同;minDist 用于避免多个圆心过于接近。
  • 检测到的圆信息存储在 circles 中,然后依次绘制圆心和圆轮廓。

在这里插入图片描述

上面还有一个没用检测出来,可以通过调整参数进行优化

5. 参数调优与注意事项

在使用霍夫圆变换时,参数选择对检测结果影响较大,可参照以下建议进行调节:

  • 图像预处理
    • 高斯模糊有助于消除噪点,但模糊参数不宜过大,以免模糊掉边缘信息。
  • Canny 边缘检测参数
    • param1 控制边缘检测阈值,适当提高可减少噪声,但可能漏掉较弱的边缘。
  • 累加器阈值
    • param2 决定累计票数的阈值,调低会检测到更多圆,但同时可能出现误检。
  • 半径范围
    • 根据实际需求合理设置 minRadiusmaxRadius 能有效缩小搜索空间,提高准确性。

6. 总结

霍夫圆变换利用边缘点在参数空间内的投票机制,实现了对图像中圆形的鲁棒检测。通过:

  • 灰度化与高斯模糊进行预处理,
  • 使用 Canny 算子提取边缘,
  • ( a , b , r ) (a,b,r) (a,b,r)参数空间中统计累加器,
  • 提取局部峰值确定圆的参数,

我们可以在 OpenCV 中借助 HoughCircles 简单实现这一算法。掌握了参数调优和原理后,可以在各种应用场景中自如地检测出目标圆形,提高图像处理效果。

相关文章:

25.OpenCV中的霍夫圆变换

OpenCV中的霍夫圆变换 在图像处理与计算机视觉中&#xff0c;圆形检测是一项常见的任务&#xff0c;应用场景包括车牌识别、瞳孔检测、交通标志识别等。霍夫圆变换&#xff08;Hough Circle Transform&#xff09;是一种高效且鲁棒的算法&#xff0c;通过在参数空间中寻找局部…...

OpenTiny使用指南

最近项目里用到了一个新的组件库——OpenTiny&#xff0c;但是官方文档的使用指南的描述很复杂&#xff0c;花了一些时间尝试才正常使用。下面是一个使用步骤的描述&#xff0c;可放心食用&#xff1a; 一、安装 TinyVue 组件库同时支持 Vue 2.0 和 Vue 3.0 框架&#xff0c;…...

Uniapp: 大纲

目录 一、基础巩固1.1、Uniapp:下拉选择框ba-tree-picker 二、项目配置2.1、Uniapp&#xff1a;修改端口号2.2、Uniapp&#xff1a;本地存储 一、基础巩固 1.1、Uniapp:下拉选择框ba-tree-picker 二、项目配置 2.1、Uniapp&#xff1a;修改端口号 2.2、Uniapp&#xff1a;本…...

A2A协议实现详解及示例

A2A协议概述 A2A (Agent2Agent) 是Google推出的一个开放协议&#xff0c;旨在使AI智能体能够安全地相互通信和协作。该协议打破了孤立智能体系统之间的壁垒&#xff0c;实现了复杂的跨应用自动化。[1] A2A协议的核心目标是让不同的AI代理能够相互通信、安全地交换信息以及在各…...

HTTP协议入门

文章目录 1. 概述2. 请求协议2.1 Get 方式请求协议2.2 POST 方式的请求2.3 获取请求数据 3. 响应协议3.1 响应数据格式3.2 设置响应数据 1. 概述 概念 &#xff1a;Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则…...

远程控制Android手机(web-scrcpy)

最近有web远程查看和控制Android手机的需求&#xff0c;研究了一下scrcpy&#xff0c;发现还是比较容易实现远程控制&#xff0c;所以自己就用flask写了一个web远程控制的scrcpy&#xff0c;算是推荐一下自己的作品&#xff0c;作品地址&#xff1a;https://github.com/baixin1…...

在AWS EC2上部署网站的完整步骤指南

本文详细介绍如何从零开始在AWS EC2实例上部署静态/动态网站&#xff0c;涵盖实例创建、安全组配置、环境搭建及域名绑定等关键步骤。 一、准备工作 AWS账号&#xff1a;访问 AWS官网 注册账号并完成信用卡绑定 本地工具&#xff1a; SSH客户端&#xff08;Mac/Linux自带终端&…...

CentOS下,Xftp中文文件名乱码的处理方式

乱码原因 中文版Windows默认使用GBK编码&#xff0c;现代Linux发行版&#xff08;如CentOS、Ubuntu等&#xff09;默认使用UTF-8编码。Windows下正常的编码&#xff0c;可能在linux下无法识别&#xff0c;例如&#xff1a;Windows的GBK字节0xD6D0被Linux用UTF-8解码时&#xf…...

Linux vagrant 导入ubuntu到virtualbox

前言 vagrant 导入ubuntu虚拟机 前提要求 安装 virtualbox 和vagrant<vagrant-disksize> (Linux 方式 Windows 方式) 创建一键部署ubuntu虚拟机 /opt/vagrant 安装目录/opt/VirtualBox 安装目录/opt/ubuntu22/Vagrantfile &#xff08;可配置网络IP&#xff0c;内存…...

2025高频面试算法总结篇【动态规划】

文章目录 直接刷题链接直达编辑距离最长回文子串完全平方数最长递增子序列正则表达式匹配零钱兑换鸡蛋掉落单词拆分 直接刷题链接直达 动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种通过拆解子问题并利用子问题的最优解来构建整体问题的最优解的方法&#x…...

FPGA_UART

1.UART 概述 &#xff08;通用异步收发传输器&#xff09; 1. 基本定义 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;是一种常见的串行通信协议&#xff0c;用于在设备间通过异步串行通信传输数据。它不依赖独立的时钟信号&#xff0c;而是通过预…...

绿算轻舟系列FPGA加速卡:驱动数字化转型的核心动力

在数字化浪潮席卷全球的今天&#xff0c;算力已成为推动企业创新和行业升级的核心引擎。绿算轻舟系列FPGA加速卡凭借其高性能、低延迟、高能效比的独特优势&#xff0c;正成为各领域智能化转型的“隐形加速器”。它以灵活的硬件架构和强大的并行计算能力&#xff0c;为复杂场景…...

gitee基本使用

git实用手册 git全局设置 git config --global user.name "yourname" git config --global user.email "youremail"推代码时的账号&#xff08;email) 版本回退 git loggit reset –hard <码>git push -f HTTPS步骤(上传) 拉取项目 1、新建一个…...

最短路径介绍

最短路径是图论中的算法&#xff0c;下面将列举几个常见的算法&#xff1a; &#x1f697; 一、单源最短路径&#xff08;一个起点到所有点&#xff09; 1. Dijkstra 算法 适用图&#xff1a;非负权图&#xff08;不能有负权边&#xff09; 思路&#xff1a;贪心 最小堆&am…...

VRRP 基础全解析:从结构到配置

目录 VRRP基本概述 VRRP基本结构 状态机 ​编辑 负载分担 &#xff08;多个VRRP&#xff09; VRRP基本概述 VRRP能够在不改变组网的情况下&#xff0c;将多台路由器虚拟成一个虚拟路由器&#xff0c;通过配置虚拟路由器的IP地址为默认网关&#xff0c;实现网关的备份。协…...

【NIO番外篇】之组件 Buffer

目录 一、Buffer&#xff1a;数据界的“快递小哥”/“临时仓库管理员” &#x1f609;什么是 Buffer&#xff1f;它的作用是什么&#xff1f; 二、Buffer 的“三围”和“书签”&#x1f4cc;&#xff1a;核心属性1. Capacity (容量)&#xff1a;2. Position (位置)&#xff1a;…...

Python基础知识(一、基础语法)

Python基础知识&#xff08;一、基础语法&#xff09; 字面量注释单行注释多行注释 变量数据类型数据类型查看数据类型转换 标识符命名规范不可使用关键字 运算符算数运算符赋值运算符 字符串字符串的定义方式字符串拼接占位拼接数字精度控制快速格式化 数据输入逻辑运算比较运…...

C语言题目自增在前与在后

一、题目引入 谨记真言: i的值最终都会改变 只是表达式的值不同 二、分析题目 if判断语句里面要条件为真执行时 printf语句 i 变量在前 使用i的当前值是1 i的值就是1与1相等 所以&&左边的为真 但是&&存在 必须前后都为真才为真 所以还要看&&后面…...

【口腔粘膜鳞状细胞癌】文献阅读

写在前面 看看文章&#xff0c;看看有没有思路 文献 The regulatory role of cancer stem cell marker gene CXCR4 in the growth and metastasis of gastric cancer IF:6.8 中科院分区:1区 医学WOS分区: Q1 目的&#xff1a;通过 scRNA-seq 结合大量 RNA-seq 揭示癌症干细胞…...

如何撤回刚提交的 commit

如何撤回刚提交的 commit 如果刚刚执行了 git commit 但想撤销这个提交&#xff0c;有几种方法可以实现&#xff0c;具体取决于你想达到的效果&#xff1a; 1. 撤销 commit 但保留更改&#xff08;修改回到暂存区&#xff09; git reset --soft HEAD~1这会撤销最后一次提交提…...

deepin使用autokey添加微信快捷键一键显隐ctrl+alt+w

打开deepin商店&#xff0c;搜索快捷键&#xff0c;找到autokey 快捷键管理&#xff0c;点击安装 点击右键新建文件夹 点击右键新建脚本 打开脚本并添加以下内容 import subprocess import time# ------------------ 配置项 ------------------ WM_CLASS "wechat…...

开源微调混合推理模型:cogito-v1-preview-qwen-32B

一、模型概述 1.1 模型特点 Cogito v1-preview-qwen-32B 是一款基于指令微调的生成式语言模型&#xff08;LLM&#xff09;&#xff0c;具有以下特点&#xff1a; 支持直接回答&#xff08;标准模式&#xff09;和自我反思后再回答&#xff08;推理模式&#xff09;。使用 I…...

【uniapp-兼容性处理】swiper在iOS上偶发出现后几张图片白屏情况

【日期】2025-04-14 【问题】 swiper在iOS上偶发出现后几张图片白屏情况 swiper内部的几个swiper-item垂直排列&#xff0c;各自进行滚动&#xff0c;样式方面兼容性出现问题 【原因】&#xff1a; 原代码&#xff1a;&#xff08;不应在swiper-item添加style属性&#xf…...

go中new和make有什么异同?

相同点&#xff1a;都是给变量分配内存 不同点&#xff1a; 作用类型不同。new通常给int、string、数组类型的变量分配内存&#xff0c;而make通常给slice、map、channel分配内存。返回值类型不同。new返回指向变量的指针&#xff0c;make返回的是变量本身new分配内存空间后&…...

RabbitMQ 深度解析:从基础到高级应用的全面指南

&#x1f430; RabbitMQ 深度解析&#xff1a;从基础到高级应用的全面指南 前言&#x1f4d8; 一、RabbitMQ 简介⚙️ 二、核心特性可靠性 &#x1f512;灵活路由 &#x1f504;高可用性 &#x1f310;多协议支持 &#x1f30d;多语言客户端 &#x1f4bb;插件机制 &#x1f50…...

动手强化学习之马尔可夫决策(机器人篇)

1 马尔可夫决策过程 马尔可夫决策过程&#xff08;Markov Decision Process, MDP&#xff09;是一种数学框架&#xff0c;用于建模智能体&#xff08;agent&#xff09;在随机环境中做决策的问题。它假设环境的状态转换具有马尔可夫性质&#xff0c;即未来的状态只依赖于当前状…...

【RabbitMQ】核心概念和工作流程

文章目录 RabbitMQ 工作流程流程图 Producer 和 ConsumerConnecting 和 ChannelVirtual hostQueueExchangeRabbitMQ 工作流程 RabbitMQ 工作流程 流程图 RabbitMQ 就是一个生产者/消费者模型 Producer 就是生产者、Consumer 就是消费者Broker 是 RabbitMQ 服务器生产者和消费…...

Windows 操作系统 - Windows 10 磁盘管理无法为 C 盘选择扩展卷

Windows 10 磁盘管理无法为 C 盘选择扩展卷 在 Windows 10 的磁盘管理中&#xff0c;无法为 C 盘选择扩展卷&#xff08;选项灰色不可用&#xff09;&#xff0c;主要原因是未分配空间没有紧邻 C 盘的右侧 补充&#xff1a;Windows 10 磁盘管理打开方式 1. 按下快捷键【Win …...

数据结构——双向链表

首先我们要介绍一下链表的分类 链表的分类 链表说明&#xff1a; 虽然有这么多种链表结构&#xff0c;但是我们实际中用的还是两种结构&#xff1a;单链表&#xff08;单向不带头不循环&#xff09;和 双向带头循环链表 。 单链表&#xff08;单向不带头不循环&#xff09;&…...

Git报错remote: Verify fatal: Authentication failed for ***

解决 Git 拉取代码时报错&#xff1a;fatal: Authentication failed 在使用 Git 时&#xff0c;执行如下命令&#xff1a; git pull origin master出现报错&#xff1a; remote: Verify fatal: Authentication failed for ***一、问题原因分析 1. 使用 HTTP 协议访问&#…...

八、自动化函数

1.元素的定位 web自动化测试的操作核心是能够找到页面对应的元素&#xff0c;然后才能对元素进行具体的操作。 常见的元素定位方式非常多&#xff0c;如id,classname,tagname,xpath,cssSelector 常用的主要由cssSelector和xpath 1.1 cssSelector选择器 选择器的功能&#x…...

websoket 学习笔记

目录 基本概念 工作原理 优势 应用场景 HTTP协议与 webSoket协议之间的对比 消息推送场景 1. 轮询&#xff08;Polling&#xff09; 2. 长轮询&#xff08;Long Polling&#xff09; 3. 服务器发送事件&#xff08;Server-Sent Events, SSE&#xff09; 4. WebSocket…...

正版金币捕鱼海洋管家APP源码结构解析与运行环境说明

这是一款基于成熟运营逻辑开发的休闲类互动娱乐游戏《海洋管家》&#xff0c;采用金币流通体系&#xff0c;双端源码完整&#xff0c;结构清晰&#xff0c;适合用于结构学习、本地部署测试或功能参考。 整体玩法围绕捕鱼为主线&#xff0c;并融合了排行榜、VIP、签到、道具商城…...

大语言模型深度思考与交互增强

总则&#xff1a;深度智能交互的全面升级 在主流大语言模型&#xff08;LLM&#xff09;与用户的每一次交互中&#xff0c;模型需于回应或调用工具前&#xff0c;展开深度、自然且无过滤的思考进程。当模型判断思考有助于提升回复质量时&#xff0c;必须即时进行全方位的思考与…...

Vue.js 项目中 vue.config.js 常用配置项解析

Vue.js 项目中 vue.config.js 常用配置项解析 摘要 在 Vue CLI 创建的项目中&#xff0c;vue.config.js 是核心配置文件&#xff0c;用于定制化构建、开发和部署流程。本文详细解析了该文件的常用配置项&#xff0c;包括基础路径、开发服务器、Webpack 配置、CSS 预处理、插件…...

Javascript逗号操作符

这段代码是一个使用了生成器函数&#xff08;Generator Function&#xff09;的无限循环&#xff08;for (;;)&#xff09;&#xff0c;内部通过switch语句控制流程。代码中有很多逗号分隔的语句&#xff0c;这其实是利用了JavaScript的逗号操作符&#xff08;comma operator&a…...

windows系统安装驱动、cuda和cudnn

一、首先在自己的电脑里安装了nvidia的独立显卡 显卡的查找方式&#xff1a; CtrlShiftEsc打开任务管理器&#xff0c;点击性能&#xff0c;点击GPU 0查看显卡型号&#xff0c;如下图所示&#xff1a; 只要电脑中有nvidia的独立显卡&#xff0c;就可以暗转显卡驱动、cuda和cu…...

常见的 14 个 HTTP 状态码详解

文章目录 一、2xx 成功1、200 OK2、204 No Content3、206 Partial Content 二、3xx 重定向1、301 Moved Permanently2、302 Found3、303 See Other注意4、Not Modified5、307 Temporary Redirect 三、4xx 客户端错误1、400 Bad Request2、401 Unauthorized3、403 Forbidden4、4…...

DAY 44 leetcode 28--字符串.实现strStr()

题号28 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 我的解法 双指针&#xff0c;slow定位&…...

Nginx用途以及好处:

反向代理&#xff1a; 1、提高访问速度 2、进行负载均衡&#xff1a;所谓负载均衡&#xff0c;就是把大量的请求按照我们指定的的方式均衡的分配给集群中的每台服务器(不使用nginx前端会固定的访问某一台服务器 加入nginx分配到多台服务器) 3、保证后端的安全 服务器一般部署在…...

打造可控可测的星座网络:IPLOOK低轨通信仿真平台搭建实践

在低轨卫星通信迅猛发展的趋势下&#xff0c;空天地一体化网络正逐步成为新一代信息基础设施的核心组成。作为移动核心网领域的技术引领者&#xff0c;IPLOOK依托在5G核心网、NTN&#xff08;非地面网络&#xff09;和卫星通信仿真方面的技术优势&#xff0c;率先构建了自主可控…...

火车头采集动态加载Ajax数据(无分页瀑布流网站)

为了先填充好数据在上线&#xff0c;在本地搭建了一个网站&#xff0c;并用火车头采集数据填充到里面。 开始很上手&#xff0c;因为找的网站的分类中是有分页的。很快捷的找到页面标识。 但是问题来了&#xff0c;如今很多网站都是采用的Ajax加载数据&#xff0c;根本没有分…...

笔记:代码随想录算法训练营day67:Floyd 算法精讲、A * 算法精讲 (A star算法) 严重超时完结,不过,撒花

学习资料&#xff1a;代码随想录 Floyd 算法精讲 卡码网&#xff1a;97. 小明逛公园 首先明确floyd算法解决的是多源最短路径问题&#xff0c;对边的权的正负值没有要求&#xff0c;而且是动态规划的思想 五部曲&#xff1a; 定义&#xff1a;grid[i][j][k]表示从i出发到j…...

Electron Forge【实战】桌面应用 —— AI聊天(中)

系列教程 Electron Forge【实战】桌面应用 —— AI聊天&#xff08;上&#xff09; 添加本地存储 Dexie.js 用 IndexedDB 实现&#xff0c;Dexie.js 库简化操作 npm i dexie新建文件 src\db.ts import Dexie, { type EntityTable } from "dexie";import { Provide…...

国达陶瓷重磅推出陶瓷罗马柱外墙整装尖端新产品“冠岩臻石”

近日&#xff0c;记者在佛山国达建材有限公司&#xff08;以下简称国达陶瓷&#xff09;董事长杨建平处了解到&#xff0c;该公司重磅推出的“冠岩臻石”新产品&#xff0c;是属于陶瓷罗马柱外墙整装产品中的尖端产品。新产品自面市之后&#xff0c;深受高端用户的青睐与认可。…...

Java 系统设计:如何应对高并发场景?

Java 系统设计&#xff1a;如何应对高并发场景&#xff1f; 在现代互联网应用中&#xff0c;高并发场景已经成为系统设计中不可避免的挑战。无论是电商秒杀、抢票系统&#xff0c;还是实时数据处理平台&#xff0c;高并发场景都对系统的性能、稳定性和扩展性提出了极高的要求。…...

VR 全景多维赋能,众趣科技助力零售业开启购物新时代

说到商铺这个词&#xff0c;最早形成于春秋战国时期&#xff0c;当时还未形成固定位置的商铺&#xff0c;部分有远见的商人会在人流量较大的区域摆设摊位&#xff0c;促进了城市的繁荣‌。‌到了唐宋时期&#xff0c;商铺进一步发展‌&#xff0c;并随着商品经济的发展和城市人…...

五大生产模式(MTS、MTO、ATO、ETO、CTO)的差异

五大生产模式&#xff08;MTS、MTO、ATO、ETO、CTO&#xff09;差异 一、 库存控制二、 订货提前期三、交期与库存分析四、五大生产模式的产品生命周期 一、 库存控制 ETO 模式侧重于原材料库存管理&#xff0c;以应对定制设计所需的物料供应。 MTO 模式重点是原材料库存&…...

clickhosue中json字符串转为表

将json字符串直接通过sql转为表,这里就可以直接把接口来的数据,直接通过clickhouse进行关联查询了。 -- 将json字符串直接通过sql转为表,这里就可以直接把接口来的数据,直接通过clickhouse进行关联查询了。 WITH -- 解析 JSON 数据为字符串json_data AS (SELECT [{"c…...

二叉树的基本功能实现

一.二叉树的结构及实现 1.二叉树的结构 在之前的章节中已经介绍过&#xff0c;二叉树是一种特殊的树&#xff0c;其最大度为2&#xff0c;及最多有左&#xff0c;右两个孩子&#xff0c;结构图如下 在此之前已经讨论过一些特殊的二叉树&#xff0c;这里讨论一般的二叉树 2.…...