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

基于C++(MFC)的细胞识别程序

基于 mfc 的细胞识别程序

一、图像处理课程设计目标

1.1 课题与技术指标

课题:利用图像处理技术设计细胞识别程序。 技术指标:

  1. 实验 VS2019 MFC 开发平台
  2. 待识别图像为 24bit 的真彩色细胞图像进行处理
  3. 要求识别出细胞,并且保证准确度情况下,统计出细胞的个数和大小。

1.2 实践情况

1.课堂教学:布置课程设计任务,相关知识介绍等环节。

2.上机实验:根据课程设计任务要求,设计步骤;根据数字图像处理基本知识逐 步完成设计步骤。

1.3 任务点

1.完成图像标注:添加 cidb.h,cdib.cpp、添加函数、添加消息响应函数、添加 菜单、打开图像。

2.完成细胞的判别:持续判断 Maybe 点邻域有无 Mak 点、Sobel 计算边缘、删除 孤立边缘、生成黑白图像。

3.细胞收缩:利用 stack、vector 获取孔洞坐标、填充孔洞、Edge 处置 0、4 方 向、8 方向交替生成边缘。 4.细胞中心点信息获取:递归算法、判别局部是否全是边缘、储存全部中心位置。

5.错误信息的删除:计算中心点均值,半径、去除半径过小的点、包含圆的剔除、 相交过大圆的剔除、信息统计与显示

二、设计思路

图像处理之细胞识别的主要工作就是识别细胞数目以及选择出指定大小细 胞。设计思路如下图 1 所示。同时我们要去除不符合要求的中心点,来确定最终 的细胞数目,去除太小和太大的细胞[1-2],并结合实际来修改各种参数,设计合理。

图 1 系统设计思路

三、创建工程及算法分析

3.1 预备工作及工程创建

(1)VS2019 安装 MFC 与 C++ 开发环境

(2)创建 MFC 工程如下图所示

图 2 创建工程

图 3 MFC 配置

3.2 打开 BMP 图片与显示 HIS 值

代码分析:

(1)在 onDraw 函数实现显示图片;在 messages 中添加 dispaly()实现打开一幅图 像的功能。在 LoadBmp()函数中利用 fopen 实现自动打开图片,利用 fread 读取 图片信息。

(2)通过:查看—> 建立类向导—> 添加 OnMouseMove()函数,添加代码实现获取 所要信息;实现鼠标移动显示 HSI。

(3)通过函数 RgbtoHsi 实现 RGB 向 HSI 的转化。说明 RGB 向 HSI 模型的转换 是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转 换。基本要求是将 RGB 中的亮度因素分离,将色度分解为色调和饱和度,并用 角向量表示色调[3]。如果直接对 R、G、B 处理,其处理过程中很可能会引起三个 量不同程度的变化,这样就会产生色差问题,甚至带来颜色上的失真。HSI 模型 的出现,使得在保持色彩无失真的情况下实现图像处理成为可能。

图 4 HSI 显示

主要代码:

图 5 HSI 主要代码

3.3 Mark-细胞标记

代码分析:

确定 Mark 与 mbMark 是通过半径来的,通过计算图像上的某个像素点与细胞 内部像素点的欧几里得距离与归一化门限值分别为 0.09 和 0.15 比较,即到圆心

(meanH,meanS)r<0.09 是 Mark 红色(细胞),到圆心 0.09<r<0.15 内是 mbMark 蓝色。OnMouseMove 函数里调用 RgbtoHsi(&rgb, &Hsi)函数,可以在屏幕上显示 鼠标所指点的坐标以及 RGB、HSI 和灰度值,通过 HSI 的可以选取合适的阈值来 找到细胞以及边界[4]。

边缘提取的方法:先滤波,去除噪声的影响,防止细胞内的噪声的影响。之 后用 sobel 算子求出边界,之后画一个 5*5 的矩形,如果没有遇到边界,是噪 声,去除。边界点是绿色。细胞边界分别用红色、暗红、蓝色和绿色标记出来。

主要代码:

图 6 Mark 主要代码

图 7 标记后情况

3.4 OnTwoVaule()-二值化

代码分析:

背景灰度值为 128,细胞灰度值为 240,边缘为 255。二值化便于轮廓提取。

均值滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当 前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中 所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点 上的灰度个 g(x,y),即个 g(x,y)=1/m ∑f(x,y);m 为该模板中包含当前 像素在内的像素总个数。

1.0x7X    //edge 边界含义(0x7x 表示边界没 Mark,存在为四边)

2.0x8X     //Mark--not edge 是细胞

3.0xfX     //Mark --edge

4.0xX1     //visited

5.0x2     //CENTERED

6.m_vCenterPoints.at(j)  //存储最后中心点的地方

图 9 二值化现象

3.5 OnFillHoles()-填洞

代码分析:

在阈值处理时,如果像素在阈值范围内,则像素将被标志。孔洞填充将先统 计所有连通的非标志区域面积,总会有一个或者几个面积特别大的区域,其它的 都是面积相对较小的区域。较小或者很小的往往就是系统所要填充的孔洞了。填 细胞中的洞,(即为 0 的值),填完后,处理非 Mark 的,边界的值(目的是打 开边缘),设为 0.填洞方法:用栈,向量处理,(从四个方向)没访问过的黑点 进栈,直到边和走完。之后读值到 xt,yt 并去值,v 放的是点的位置。没有碰到 边界和小于 100,则填洞,即令洞的各点值为 Mark 值。将细胞中灰度值为 128 的 部分的灰度值设置为 240[5]。

图 10 填洞主要代码

图 11 填洞现象

3.6 3shrink()-收缩

代码分析:

收缩的目的是为了方便计数。扫描图像,对图像进行预先的 3 次腐蚀,判断 所生成边界点,然后根据原理判定是否标注该点,存放所标志的中心点,便于统 计细胞个数及计算细胞半径。

算法:由 Mark 生成边界,我们有四邻域生成边界和八邻域生成边界。判断 该点是否为 Mark 点,如果是 Mark 点的话,我们判断 i、j 是否是我们选取图片 的边界,如果是的话,我们将该点变成边缘点,否则我们判断它的上下左右(周 围八个点)是否有非 Mark 点,如果有,则将这边变成边缘点,反之,不变。最后 去掉边界则完成收缩。

图 12 收缩主要代码及现象

3.7 findcenter()-中心点获取

代码分析:

通过判断 MARK 点上下左右四个方向或者八个方向是否有非 Mark 点,如果有 的话即认为是边界,将该点加上边界标志。在收缩的过程(知道没有边界可去) 中,清除所有标志点,在不超过边下,没有被访问过的边缘,四个方向全是非 Mark 的话,(收缩 k<2 时)则是孤立点。K>=2,是中心点,保存 x,y,半径。还有除了 边界就是背景,这也要保存(就是消失前保存)。 Mark(i,j):八个方向,没有访问过的 Mark,且是边界点,则保存;SaveIT(I,j): 这点不是中心点(相当于没有访问过)则设为中心点(并保存);已经是中心点则 去除标志,八方向寻找中心点。值得注意的是我们也要去除半径不大于 2 的孤立点,因为我们认为它的半径太小,是噪声。如果是半径大于 2 的孤立点,我们对他进行标 记成中心点,对半径做一点补偿(pt.radius=k+pre_shrink_count+4,4 为补偿)。然 后在入队。

合并中心点:本点是中心点,则八个方向看都不是中心点,则保存。有相连 的话,多点求中心与半径(用到了 CalcCenterArea(i.j)), CalcCenterArea(i.j): 八方向求中心点后去除标志,循环统计。半径取最大,而 x,y 则是取平均。

去除多余圆或者错误圆:

1、相近圆:圆心距离小于 10,则取半径小的中心点为中心点,取半径最大值 +2;

2、去除潜在的错误,即半径小于 9 的去掉。但四个方向,边部补偿,防止边 部的细胞被去除。 3、多圆相交时,不相交部分小于则去除。具体操作:首先,相交部分先取出 来保存。之后,单个圆内的交上了被标志(画一个方框然后统计之内的点数), 之后单个圆不相交的进行统计。不相交的占 50% 以下则清除本圆。

图 13 中心点获取主要代码及现象

3.8 count()-统计

代码分析:

首先图像重新打开,然后我们获取细胞内部的 HSI 的最大值和最小值,并且 计算细胞,平均半径,平均面积等值。Count()函数中首先调用了重载函数 reload(),将图片还原,随后将之前细胞识别所保留下来的信息(细胞个数), 从 view.h 中提取信息,将细胞数、半径、面积 、显示在对话框中。

1)利用前面修正的结果,在 Count 模块进行总的计数,计算出平均半径 和平均面积并输出。

2)文件重新加载模块。如果 noclick 置为 true,则进行重新加载图片

图 14 重新加载图片

图 15 最终标记现象

3.9 OnCellprgAll( )-按序执行全部

图 16 OnCellprgAll( )

代码分析:不难看出调用了前面各个函数可以依次实现细胞识别的所有操作步 骤。

四、错误情况及分析

4.1 未声明全局变量信息头

图 17 错误案例 1

4.2 错把指针当作 int 型

修正:应将 int m_pImage;改为 BYTE* m_pImage;

图 18 错误案例 2

4.3 软件菜单栏突然丢失

图 19 错误案例 3

原因:误碰软件,把菜单移出去了,可以移动菜单栏使其正常

图 20 修正错误

4.4 矩形框在鼠标未按下就出现了

原因:OnMouseMove 中判断条件不对

五、心得体会

在这次为期 2 周的课程设计中,我真的学到了很多,同时学会如何打开和自 动打开 bmp 图像,对其进行进一步操作,将图像 RGB 信息转为 HIS,再 Mark 标 记,边缘提取,二值化,填洞,收缩,中心点获取,中心点统计等。Mark 实际上 是对我们所要的要素进行标记,便于识别,基本思想是按半径进行区分一定是细胞和可能是细胞的区域。二值化的意义在于便于轮廓提取;实现办法是设置一个 阈值,将图像分割成大于阈值和小于阈值的两部分像素群。为什么要填洞?如果 不填洞对后续细胞统计干扰很大,说不清到底是一个细胞还是两个细胞,因此我 们需要填洞;孔洞填充的原理如下:在阈值处理时,如果像素在阈值范围内,则 像素将被标志。孔洞填充将先统计所有连通的非标志区域面积,总会有一个或者 几个面积特别大的区域,其它的都是面积相对较小的区域。较小或者很小的往往 就是系统所要填充的孔洞了。收缩实质是先去掉边缘点,然后将剩下的 Mark 点 生成边缘点,再去掉在生成,直到去掉三次边缘,就这样收缩,如果收缩过程中 有些 Mark 点收缩到很小,可以认为那不是细胞,那就可以直接去掉。获得中心 点是这次课程设计最关键的一部分,这个算法决定着结果的好坏。中心点的获取 就是在每一次的收缩之前先进性一次判断,如果该点是孤立点或者是全边界点则 将该点保存起来。因为对于孤立点和全边界点如果不进行保存的话在进行一次收 缩之后该点就会消失,因此为了保存该点,就要在其消失前将其保存。最后每一 个细胞收缩到最后可能剩下一个点到四个点。因此第一次获取的中心点个数会是 真正中心点个数的三倍左右。细胞半径大小的获取是通过判断该中心点是通过多 少次收缩之后获得的从而近似获得细胞的半径。统计,实质就是通过前面的中心 点,半径来计数即可。Count()函数中首先调用了重载函数 reload(),将图片还 原,随后将之前细胞识别所保留下来的信息(细胞个数),从 view.h 中提取信息, 将细胞数、半径、面积 、显示在对话框中。同时细胞处理方法很大程度是与参 数设定有关,涉及的影响因素很多,在这次课程设计中真正意义上理解了之前图 像处理课程的理论,现在在原有的 C++ 基础上多学会了一种 MFC 图像处理方式。

在这次图像处理课程设计中,我认为最大的挑战是最开始的打开图片与完成 OnMouseMove 显示 HSI 的过程,虽然并没有后面的算法复杂,但是这是一个从无 到有的过程;从零基础的 VS2019 的 MFC 项目到最后可以独立完成一个自己 MFC 项目。在不断上网查询有关技术和询问老师同学的协助下;我终于完成了鼠标移 动显示 HSI 的任务,然后根据老师提供的核心参考代码,不断调试,查看报错, 完善代码,完善函数与变量的声明,解决报错,一步步走下去,完成了全部任务, 虽然辛苦但是很值得,这让我们切实的体会与学习到很多。

六、致谢

在这短暂两周时间内,从接到课题到全部调试完成,经历了很多困难,真心 感谢老师在群里各种教导和学长学姐对我的指导,在你们的帮助下顺利完成此次 课设。金无足赫,人无完人。由于本人学术水平有限,所写报告难免有错误之处。 恳请各位老师和同学与指正!

七、参考文献

[1] 刘 腾 飞 , 刘威 . 基于 Matlab 的 肿 瘤 细 胞 识 别 系 统 [J]. 电 子 设 计 工 程,2021,29(06):1-5.

[2]黄松. 基于图像识别方法体细胞计数系统的研究[D].山西农业大学,2013. [3] 朱会平 , 陈志远 . 基 于 细 胞 显 微 图 像 的 数 量 统 计 应 用 [J]. 实验室科 学,2011,14(05):73-75.

[4]蔡朋杞. 红细胞识别系统的设计与实现[D].电子科技大学,2011. [5]赵秋影. 人体细胞识别技术研究[D].长春理工大学,2007.

相关文章:

基于C++(MFC)的细胞识别程序

基于 mfc 的细胞识别程序 一、图像处理课程设计目标 1.1 课题与技术指标 课题&#xff1a;利用图像处理技术设计细胞识别程序。 技术指标&#xff1a; 实验 VS2019 MFC 开发平台待识别图像为 24bit 的真彩色细胞图像进行处理要求识别出细胞&#xff0c;并且保证准确度情况下…...

【前端HTML生成二维码——MQ】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前端HTML生成二维码——MQ 前言本文将介绍前端HTML如何更具用户输入的内容生成对应的二维码,附页面代码、实现函数、js脚本。一、自定义显示页面1、效果图二、使用步骤1、引入库2、实现函数3、页面及函数代…...

Spring Boot自动配置原理深度解析:从条件注解到spring.factories

大家好&#xff01;今天我们来深入探讨Spring Boot最神奇的特性之一——自动配置(Auto-configuration)。这个功能让Spring Boot如此受欢迎&#xff0c;因为它大大简化了我们的开发工作。让我们一起来揭开它的神秘面纱吧&#xff01;&#x1f440; &#x1f31f; 什么是自动配置…...

【unity实战】Animator启用root motion根运动动画,实现完美的动画动作匹配

文章目录 前言1、动画分类2、如何使用根位移动画&#xff1f; 一、根位移动画的具体使用1、导入人形模型2、导入动画3、配置动画参数4、配置角色Animator动画状态机5、使用代码控制人物前进后退 二、问题分析三、Humanoid动画中的Root Motion机制及相关配置1、Humanoid动画中的…...

(51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)

目录 演示视频&#xff1a; 源代码 main.c LCD1602.c LCD1602.h AT24C02.c AT24C02.h Key.c Key.h I2C.c I2C.h Delay.c Delay.h 代码解析与教程&#xff1a; Dealy模块 LCD1602模块 Key模块 I2C总线模块 AT24C02模块 /E2PROM模块 main模块 演示视频&#xff1a; &…...

2d深度预测

Depth anything v1 相对深度估计&#xff0c;要用绝对深度估计需要微调 概要&#xff1a; 1 使用大量的未标注图像信息 2 采用优化策略—数据增强工具(作用在未标注图像) 3 进行辅助监督—继承语义分割知识&#xff08;作用在未标注图像&#xff09; 数据层面&#xff1a; …...

Android12 ServiceManager::addService源码解读

源码 Status ServiceManager::addService(const std::string& name, const sp<IBinder>& binder, bool allowIsolated, int32_t dumpPriority) {auto ctx mAccess->getCallingContext();// apps cannot add servicesif (multiuser_get_app_id(ctx.uid) >…...

【HDFS入门】HDFS性能调优实战:从基准测试到优化策略

目录 引言 1 HDFS性能评估体系 1.1 性能评估体系架构 1.2 基准测试工具对比 2 TestDFSIO基准测试实战 2.1 TestDFSIO工作原理 2.2 测试执行步骤 2.3 结果分析指标 3 TeraSort基准测试实战 3.1 TeraSort测试流程 3.2 测试执行命令 3.3 关键性能指标 4 HDFS性能调优…...

Linux 内核开发/测试工具对比 Windows 驱动验证工具 (Driver Verifier)

Windows 的 Driver Verifier 是一个用于测试和验证驱动程序的强大工具。在 Linux 内核开发中&#xff0c;虽然没有一个完全等价的单一工具&#xff0c;但有多种工具和框架可以提供类似或更专业的功能。 Linux 内核开发和测试工具 1. KASAN (Kernel Address Sanitizer) 功能&…...

通信算法之269 : OFDM信号的循环自相关特性用于无人机图传信号识别

OFDM信号的循环自相关特性是其循环平稳性的核心体现,如下: [相关仿真代码,联系,提供] 一、循环自相关特性来源 ‌循环前缀引入周期性‌ OFDM符号通过添加循环前缀(CP)形成符号周期结构,导致信号具有循环平稳性‌26。每个符号的CP与尾部数据重复,在时延等于FFT长度(N…...

【无人机】电子速度控制器 (ESC) 驱动电机,常见的电调协议,PWM协议,Oneshot协议,DShot协议

目录 1、ESCs & 电机 #1.1、ESC 协议 --ESC Protocols #1.1.1、PWM协议&#xff0c;需要校准 #1.1.2、One Shot 125协议&#xff0c;速率更快 #1.1.3、DShot &#xff0c;减少延迟&#xff0c;无需校准 #1.1.4、无人机CAN 2、PWM 伺服系统和 ESC&#xff08;电机控…...

LeadeRobot具身智能应用标杆:无人机X柔韧具身智能,空中精准作业游刃有余

当前,具身智能已成为全球科技领域的前沿焦点,更受到国家战略级重视,吸引科技产业巨头抢滩布局。但同时,具身智能的商业化路径、规模化应用场景、技术成本等难题也开始在资本界与产业圈引起广泛讨论。 目前,万勋科技基于Pliabot 柔韧技术已推出多款具身智能柔韧机器人产品,在柔…...

WebSocket:实现实时双向通信的技术

WebSocket是一种网络通信协议&#xff0c;它在单个TCP连接上提供全双工通信。WebSocket协议在2011年被IETF&#xff08;互联网工程任务组&#xff09;标准化为RFC 6455&#xff0c;并由W3C&#xff08;万维网联盟&#xff09;制定了WebSocket API标准&#xff0c;使得客户端&am…...

探索 HumanoidBench:类人机器人学习的新平台

在科技飞速发展的当下&#xff0c;类人机器人逐渐走进我们的视野&#xff0c;它们有着和人类相似的外形&#xff0c;看起来能像人类一样在各种环境里完成复杂任务&#xff0c;潜力巨大。但实际上&#xff0c;让类人机器人真正发挥出实力&#xff0c;还面临着重重挑战。 这篇文…...

「数据可视化 D3系列」入门第十一章:力导向图深度解析与实现

D3.js 力导向图深度解析与实现 力导向图核心概念 力导向图是一种通过物理模拟来展示复杂关系网络的图表类型&#xff0c;特别适合表现社交网络、知识图谱、系统拓扑等关系型数据。其核心原理是通过模拟粒子间的物理作用力&#xff08;电荷斥力、弹簧引力等&#xff09;自动计…...

「数据可视化 D3系列」入门第八章:动画效果详解(让图表动起来)

动画效果详解 一、D3.js动画核心API1. d3.transition()2. transition.duration()3. transition.delay()4. 其他重要API 二、动画实现原理三、完整动画示例解析1. 柱状图生长动画2. 文本跟随动画 四、动画效果优化技巧1. 缓动函数选择&#xff1a;2. 组合动画&#xff1a;3. 动画…...

index: 自动化浏览器智能体

GitHub&#xff1a;https://github.com/lmnr-ai/index 更多AI开源软件&#xff1a;https://www.aiinn.cn/ 在做浏览器自动化脚本时&#xff0c;我们常常需要编写大量代码来处理复杂的网页交互&#xff0c;不仅耗时耗力&#xff0c;还难以调试和优化&#xff0c;要是出错更是难以…...

网页端调用本地应用打开本地文件(PDF、Word、excel、PPT)

一、背景原因 根据浏览器的安全策略&#xff0c;在网页端无法直接打开本地文件&#xff0c;所以需要开发者曲线救国。 二、实现步骤 前期准备&#xff1a; 确保已安装好可以打开文件的应用软件&#xff0c;如&#xff0c;WPS&#xff1b; 把要打开的文件统一放在一个文件夹&am…...

如何批量在多个 Word 文档末尾添加广告页面

Word是我们日常使用非常频繁的文档编辑软件&#xff0c;凭借其强大的文本处理功能&#xff0c;如文字输入、格式设置、段落排版、图片插入等&#xff0c;可以帮助我们轻松创建专业且美观的文档。不过呢当我们需要将这些文档分享给他人时&#xff0c;往往需要在每个文档的末尾添…...

JavaScript原生实现简单虚拟列表

旧笔记&#xff0c;最近使用时做了点新优化&#xff0c;之前只发在了个人博客上 地址&#xff1a;JavaScript原生实现简单虚拟列表 背景 在公司项目中&#xff0c;需要给商品配置大量的属性值&#xff0c;可能其中一个属性的值数量就有成百上千条。 一个商品会有很多属性&…...

安心联车辆管理平台应用前景分析

安心联车辆管理平台凭借其技术创新与行业适配能力&#xff0c;展现出广阔的应用前景。以下从技术驱动、行业覆盖、实际效益、市场策略及未来潜力五个维度进行分析&#xff1a; 一、技术驱动的核心竞争力 高精度定位与多传感器融合 安心联采用北斗/GPS双模定位技术&#xff0c;实…...

力扣每日打卡 2176. 统计数组中相等且可以被整除的数对(简单)

力扣 2176. 统计数组中相等且可以被整除的数对 简单 前言一、题目内容二、解题方法1. 暴力解法2.官方题解官方也是暴力解法 前言 这是刷算法题的第十三天&#xff0c;用到的语言是JS 题目&#xff1a;力扣 2176. 统计数组中相等且可以被整除的数对(简单) 一、题目内容 给你一…...

OpenStack Yoga版安装笔记(22)Swift笔记20250418

一、官方文档 https://docs.openstack.org/swift/yoga/admin/objectstorage-components.html#https://docs.openstack.org/swift/yoga/admin/objectstorage-components.html# 二、对象存储简介&#xff08;Introduction to Object Storage&#xff09; OpenStack 对象存储&a…...

Linux 线程互斥

目录 Linux线程互斥 进程线程间的互斥相关背景概念 互斥量的接口 初始化互斥量 互斥量加锁和解锁 锁的封装 ​编辑 互斥量加锁的非阻塞版本 互斥量实现原理探究 可重入VS线程安全 概念 常见的线程不安全的情况 常见的线程安全的情况 常见的不可重入的情况 常见的…...

webgl入门实例-12WebGL 投影矩阵 (Projection Matrix)基本概念

WebGL 投影矩阵 (Projection Matrix) 投影矩阵是将3D场景从视图空间(相机空间)转换到裁剪空间的关键矩阵&#xff0c;它决定了3D物体如何投影到2D屏幕上。 投影矩阵的作用 定义3D空间到2D平面的映射方式确定视景体(view frustum)的形状和范围实现透视效果(近大远小)或正交投…...

《实战AI智能体》——邮件转工单的AI自动化

💡 为什么使用 邮件转工单(AI自动化)模板 想象一下,您的邮箱像是一个繁忙的宇宙港口,每封邮件都是一艘载着信息的飞船。当这些飞船抵达时,我们的自动化系统就像是一位高效的宇宙调度员,迅速将每艘飞船(邮件)转化为一艘艘探索号(工单),并为它们分配勇敢的宇航员(…...

YOLOv8 Bug 及解决方案汇总 【2024.1.24更新】【环境安装】【训练 断点续训】OMPError / KeyError

YOLOv8 Bug 及解决方案汇总&#xff1a;深入解析与应对 引言 YOLOv8作为一款高性能的目标检测算法&#xff0c;在实际应用中难免会遇到各种各样的问题。本文将对YOLOv8常见的Bug进行汇总&#xff0c;并提供相应的解决方案&#xff0c;旨在帮助开发者更好地使用和优化YOLOv8。…...

健康养生:开启活力生活新篇章

在当代社会&#xff0c;熬夜加班、久坐不动、外卖快餐成为许多人的生活常态&#xff0c;随之而来的是各种亚健康问题。想要摆脱身体的疲惫与不适&#xff0c;健康养生迫在眉睫&#xff0c;它是重获活力、拥抱美好生活的关键。​ 应对不良饮食习惯带来的健康隐患&#xff0c;饮…...

Yocto项目实战教程 · 第4章:4.3小节-层

&#x1f50d; B站相应的视频教程&#xff1a; &#x1f4cc; Yocto项目实战教程-第4章-4.3小节-层 记得三连&#xff0c;标为原始粉丝。 在 Yocto 项目中&#xff0c;元数据&#xff08;Metadata&#xff09;不仅是构建系统的核心驱动力&#xff0c;更是实现高度定制化、可移植…...

小红书爬虫,小红书api,小红书数据挖掘

背景&#xff1a; 小红书&#xff08;Xiaohongshu&#xff09;是一款结合社交、购物和内容分享的移动应用&#xff0c;近年来在中国以及全球范围内拥有大量的用户群体。小红书上的内容包括用户的消费体验、生活方式、旅行分享、时尚搭配等。通过这些内容&#xff0c;用户可以了…...

选择 iOS 按键精灵无根有根越狱辅助工具的理由

节省成本​ 使用 iOS 按键精灵&#xff0c;每台设备可为你减少 5 - 10 元的签名成本。对于需要使用大量脚本或者多设备操作的用户来说&#xff0c;长期下来能够节省一笔可观的费用。​ 不断更新优化​ 按键精灵团队始终致力于产品的更新与优化。新版本不断增加新功能&#x…...

电脑里的AI帮手:Open Interpreter智能助手食用指南

Open Interpreter简介如下&#xff1a; interpreter是一个使用python开发的命令行工具&#xff0c;可以让你在终端中使用类似AI对话的方式&#xff0c;只需简单输入指令要求&#xff0c;即可自动编写程序、执行代码&#xff0c;实现各种自动化操作interpreter有自动检测输出结…...

Windows软件界面分析软件-控件识别工具

Inspect.exe 这是微软提供的一款 UI 自动化检查工具&#xff0c;主要用于开发和测试应用程序的辅助功能&#xff08;Accessibility&#xff09;及 UI 自动化。 主要功能&#xff1a; 查看界面元素的属性&#xff08;如名称、角色、状态、位置等&#xff09;。 支持 UIA&…...

iOS 冷启动时间监控:启动起点有哪些选择?

⏱️ iOS 冷启动时间监控&#xff1a;启动起点有哪些选择&#xff1f; 作者&#xff1a;侯仕奇 来源&#xff1a;sqi.io 在监控 iOS 冷启动性能时&#xff0c;一个关键问题是&#xff1a;如何精确记录 App 冷启动的开始时间&#xff1f; 本文将对不同的“冷启动起点”监控方式…...

MacOS怎么显示隐藏文件

现象描述&#xff1a; 有些文件比如git的配置文件会作为隐藏文件存在。 Mac os默认是不显示隐藏文件的。 但是很多场合下我们需要查看或者编辑这些隐藏文件。 解决方法&#xff1a; 如下图所示&#xff0c;在Finder中使用Shift⇧Command⌘.快捷键 显示和隐藏都是同样的按…...

苹果紧急修复两个已被利用的iOS漏洞,用于针对特定目标的复杂攻击

苹果公司已发布iOS 18.4.1和iPadOS 18.4.1更新&#xff0c;修复两个被用于针对特定iPhone用户实施高度定向、复杂攻击的关键零日漏洞。 这两个漏洞存在于CoreAudio和RPAC组件中&#xff0c;攻击者可利用它们在受影响设备上执行任意代码或绕过安全保护机制。 两个正被活跃利用…...

8.观察者模式:思考与解读

原文地址:观察者模式&#xff1a;思考与解读 更多内容请关注&#xff1a;7.深入思考与解读设计模式 引言 在开发软件时&#xff0c;系统的某些状态可能会发生变化&#xff0c;而你希望这些变化能够自动通知到依赖它们的其他模块。你是否曾经遇到过&#xff0c;系统中某个对象…...

13.编码器的结构

从入门AI到手写Transformer-13.编码器的结构 13.编码器的结构代码 整理自视频 老袁不说话 。 13.编码器的结构 T r a n s f o r m e r E n c o d e r : 输入 [ b , n ] TransformerEncoder:输入[b,n] TransformerEncoder:输入[b,n] E m b e d d i n g : − > [ b , n , d ]…...

java 设计模式之模板方法模式

简介 模板方法模式&#xff1a;定义一个算法的基本流程&#xff0c;将一些步骤延迟到子类中实现。模板方法模式可以提高代码的复用性&#xff0c; 模板方法中包含的角色&#xff1a; 抽象类&#xff1a;负责给出一个算法的基本流程&#xff0c;它由一个模板方法和若干个基本…...

C++面向对象

面向对象的思想 面向过程&#xff1a; 根据程序的执行过程&#xff0c;来设计软件的所有细节。面向过程的缺点&#xff1a;开发大型项目时&#xff0c;越来越难以把控&#xff0c;甚至失去控制。后期维护、更新成本很大。解决方案&#xff1a;使用面向对象。 什么是面向对象…...

守护进程编程

目录 一、守护进程 1.1 守护进程概述 1.2 守护进程的功能及特点 1.2.1 守护进程的功能 1.2.2 守护进程的特点 1.3 主要过程 1.4 阿里云服务器编程实现守护进程 1.4.1 daemon 命令 1.4.2 nohup命令 1.4.3 fork()编程实现 1.5 在树莓派中通过三种方式创建守护进程 1.5…...

【Spring Boot 源码学习】深入 ConfigurableEnvironment 的初始化过程

《Spring Boot 源码学习系列》 深入 ConfigurableEnvironment 的初始化过程 一、引言二、配置环境的初始化2.1 源码总览2.2 prepareEnvironment 方法2.2.1 获取或创建可配置环境2.2.2 配置环境并设置参数2.2.3 将配置属性源附加到环境中2.2.4 触发环境准备事件2.2.5 将DefaultP…...

若依集成BladeX单点登录的令牌管理与api请求流程

目录 概述系统架构单点登录流程令牌管理机制接口调用流程关键代码实现数据结构安全性考虑常见问题与解决 概述 本文档详细说明若依系统如何实现与BladeX的单点登录集成&#xff0c;包括令牌管理和接口调用的完整流程。整个集成采用基于OAuth2的授权码流程&#xff0c;允许用…...

54常用控件_QLCDNumber的属性

目录 代码示例: 倒计时 QLCDNumer 是一个专门用来显示数字的控件.类似于“老式计算器”的效果 核心属性 属性 说明 intValue QLCDNumber显示的数字值(int). value QLCDNumber 显示的数字值(double). 和intValue是联动的. 例如给value设为1.5, intValue的值就是2. 另外&a…...

IcePlayer音乐播放器项目分析及学习指南

IcePlayer音乐播放器项目分析及学习指南 项目概述 IcePlayer是一个基于Qt5框架开发的音乐播放器应用程序&#xff0c;使用Visual Studio 2013作为开发环境。该项目实现了音乐播放、歌词显示、专辑图片获取等功能&#xff0c;展现了桌面应用程序开发的核心技术和设计思想。 技…...

【ELF2学习板】Ne10进行FFT测试

目录 引言 Ne10简介 交叉编译Ne10 测试 测试程序 测试结果 结语 引言 在上一篇博文介绍了FFTW在ELF2开发板的测试。其中我们提到--enable-neon选项在aarch64平台下无法启用。接下来测试一个专门用NEON指令优化的FFT库Ne10。 Ne10简介 NE10 是一个面向 ARM 架构的开源数…...

Android device PCO (protocol configuration options) intro

术语 英文缩写英文全称中文PCOprotocol configuration options协议配置选项RILradio interface layer 无线电接口层PCO介绍 PCO(Protocol Configuration Options) 是 3GPP 标准协议(TS 24.008)中定义的核心概念,用于在 LTE/5G 网络建立 PDN 连接时传递动态配置参数(如 D…...

HAL库通过FATFS和SDIO+DMA写入SD卡数据错误

HAL库F4版本 1.28.1 最近在使用HAL库配置SDIODMA并通过FATFS向SD卡写入数据&#xff0c;但是发现写入的数据经常有错误&#xff0c;不是少了一部分就是多了一部分&#xff0c;写入的数据为csv格式&#xff0c;通过循环向缓冲区写入"100100,12.345678\r\n"数据来观察问…...

RK Android11 修改默认语言为法语及时区为巴黎时间

文章目录 1、需求2、解决 1、需求 客户要求将系统默认语言改为法语&#xff0c;系统默认时区改为巴黎时间&#xff08;也称为欧洲中部时间&#xff09;2、解决 --- a/build/make/tools/buildinfo.shb/build/make/tools/buildinfo.sh-46,7 46,7 echo "ro.product.cpu.ab…...

文件上传Ⅰ

文件上传--前后端验证 不让上传php,所以要绕过它 遇到网站可能不是php语言&#xff0c;会是java或者python语言等&#xff0c;它只能解析网站本身的语言&#xff0c;那我们就上传符合网站语言识别的格式&#xff08;它能解析什么后缀&#xff0c;就上传什么后缀&#xff09;&…...