自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(227)
  • 资源 (8)
  • 收藏
  • 关注

原创 【设计模式】SOLID 设计原则概述

SOLID 是面向对象设计中的五大原则,不管什么面向对象的语言, 这个准则都很重要,如果你没听说过,赶紧先学一下。原则可以写出更好的代码,使系统更易扩展、维护和测试。在设计类和模块时,应尽量。,使代码更加健壮、易于测试和扩展。这样每个类的变更都不会影响其他功能,符合 SRP。,否则后期修改代码时,可能会影响其他无关功能。,避免不必要的修改。

2025-03-21 18:13:45 317

原创 【设计模式】C++ 单例模式总结与最佳实践

你的项目用的是 C++11 以上吗?,它具备线程安全性、简洁性和性能优势。是软件开发中常见的设计模式之一,主要用于。,并提供一个全局访问点。如果你还在用 C++03,那就用。C++ 单例模式有多种实现方式,对于 MFC 开发,可以用。

2025-03-21 17:39:34 374

原创 【C++高速化】流水线设计提升并发效率

流水线设计模式是一种将复杂任务分解为多个独立阶段(Stage)的架构,每个阶段负责处理任务的一部分。阶段之间通过队列(Queue)传递数据,形成一个有序的处理链。并行处理:不同阶段可以同时处理不同的数据块,从而提升整体吞吐量。模块化:每个阶段独立运行,便于开发、测试和维护。灵活性:可以根据需求动态调整阶段数量和处理逻辑。在多线程场景下,我们可以为每个阶段分配一个线程,利用时间并行来加速任务处理。通过多线程流水线设计,我们能够将复杂任务分解为多个并行执行的阶段,从而显著提升程序的处理能力和吞吐量。

2025-03-21 16:18:00 674

原创 【C++】理解 C++ 中的完美转发(Perfect Forwarding)

完美转发是指在模板函数中,将参数以其原始值类别(lvalue 或 rvalue)传递给目标函数,而不会引入额外的拷贝或类型转换。C++ 通过模板类型推导、右值引用(T&&)和的结合实现了这一功能。完美转发是 C++ 中结合模板、右值引用和引用折叠的优雅解决方案。它通过T&&和确保参数按原始值类别传递,兼顾性能和灵活性。引用折叠规则是其实现的基础,而使用场景主要集中在泛型编程、性能优化和接口设计中。理解并掌握完美转发,能显著提升代码的效率和可维护性。作为 C++ 开发者,下次编写模板函数。

2025-03-20 22:01:32 709

原创 【C++】vector的push_back和emplace_back

效率通常更高效,因为它避免了拷贝或移动。但是如果是添加的对象,还是会触发拷贝或者移动(右值)灵活性直接用构造函数参数,push_back需要现成的对象。选择建议:优先考虑,除非你已经有构造好的对象需要传入。

2025-03-20 21:56:47 608

原创 【滤波算法】卡尔曼滤波手撕版本(推导+案例解释)

卡尔曼滤波(Kalman Filter, KF)是一种递归最小均方误差估计算法,适用于线性动态系统。它分为预测(Prediction) 和更新(Update)两个阶段。其中预测也就是所谓的先验,更新实际上就是后验。先理解基础的概念,以及每一个变量的定义,理解了这些才能理解接下来的公式代表的含义:Kalman 滤波是一种递归最小均方误差(MMSE)估计算法,它能在噪声环境下从不完美的观测数据中估计系统状态。它常用于导航、信号处理、控制系统、目标跟踪等场景,尤其适用于线性动态系统。Kalman 滤波的核心是基于

2025-03-19 17:39:45 574

原创 【基础算法】协方差矩阵的计算

今天有萌新同事问我如何计算协方差矩阵,这个是非常基础的,SVD, PCA,卡尔曼滤波都要用到,很重要!这个协方差矩阵可以用于分析数据的分布形态,比如用于PCA降维,或者在卡尔曼滤波中作为误差估计矩阵。协方差矩阵(Covariance Matrix)是描述多维数据统计特性的重要工具,它揭示了数据的。,在信号处理、机器学习、卡尔曼滤波、PCA 降维等领域广泛应用。

2025-03-18 19:37:58 633

原创 【C++】触发移动构造函数的两种方式

这两种方式都会触发移动构造函数,但它们的工作方式略有不同。本文将深入解析这两种写法的区别,以及它们在 C++ 编译器中的具体行为。用于将对象转换为右值引用,以便调用移动构造函数(Move Constructor)。✅ 编译器优化可以消除额外的拷贝,保证两种方式都高效运行。的工作方式是非常重要的!希望这篇文章对你有所帮助!转换成右值,最终的构造方式仍由。(如果没有合适的构造函数可用)。如果你的代码涉及性能优化,了解。,只是书写方式不同。

2025-03-17 10:56:03 366

原创 【C++】vector的内存到底在哪里

我们可以高效、安全地管理动态数组,避免内存泄漏和不必要的拷贝操作。希望本文能帮助你深入理解。是 C++ 标准库中最常用的动态数组容器,它能够自动管理内存并提供高效的随机访问能力。它的头部和数据部分分别分配在栈上还是堆上?的堆内存会被正确管理。作为函数返回值时,会发生什么?和数据指针,各占 8 字节)。头部的栈上对象会被销毁,但。的头部存储位置不变。在 64 位系统下,

2025-03-17 10:49:02 859

原创 【模型调优】手把手教你调优yolo

模型调优(Model Tuning)是指通过调整机器学习模型的参数和结构,以提高其性能和准确性的过程。在目标检测任务中,调优可以帮助模型在特定类别上达到更高的精度(如AP值),同时减少不必要的计算开销。例如,YOLO模型默认支持多类别检测,但有时我们只需要检测单一类别,并要求该类别的检测效果最佳。通过以上步骤,我们成功从YOLOv8s预训练模型中调优出一个专门检测电视的模型。利用COCO数据集提取电视类别数据,并结合Optuna进行超参数优化,最终获得了性能最佳的模型。

2025-03-14 18:53:47 885

原创 【C++】如何高效掌握UDP数据包解析

通过确保数据布局紧凑性,再结合实现高效字节序转换,能够显著提升UDP数据包解析的可靠性与代码可维护性。此方法尤其适用于嵌入式网络协议栈、物联网设备通信等场景。完整代码示例可在实际项目中扩展,加入负载解析、多线程处理等高级特性。

2025-03-14 11:09:35 1035

原创 解决ubuntu(jetpack)系统下系统盘存储不够的

若仍有问题,可考虑扩展存储或迁移大文件到外置设备。此文件记录用户登录信息,

2025-03-12 17:13:54 374

原创 【ISP】对于ISP的关键算法补充

本篇是对于ISP的关键算法进行补充说明, 后面我们将开始逐渐深入讨论ISP的pipeline。

2025-03-11 23:46:53 641

原创 【ISP】ISP的pipeline的几种关键算法

算法主要用途关键方法RawNRRAW 降噪空域滤波、时域滤波、深度学习YUVNRYUV 降噪亮度/色度独立降噪TNR时域降噪多帧融合、运动补偿HDR MergeHDR 合成多曝光合成、AI HDR色调映射Gamma、Retinex、深度学习Demosaic去马赛克插值算法、AI 方法Sharpen图像锐化高通滤波、USM、AIDehaze去雾物理模型、深度学习。

2025-03-11 23:12:43 814

原创 USB的传输速率总结

好的,用户之前询问了关于USB3.2的传输速度以及兼容性的问题,我详细解释了不同子版本的速度差异,以及设备与电脑接口的兼容性情况。现在用户回复说“总结的很好,重新整理以下,请用表格列出来”,这说明用户希望信息更结构化,方便快速查阅。首先,我需要确定用户的需求。用户可能已经理解了之前的解释,但需要更清晰的视觉呈现,比如表格,这样更容易比较不同版本之间的区别。用户可能是技术人员、学生或普通用户,想要快速参考USB3.2的不同规格和兼容性,而不需要再次阅读长段文字。

2025-03-11 10:36:51 766

原创 深入理解LRU(Least Recently Used)的概念

当物理内存的页帧被占满时,新页的加载需要替换旧页。LRU 通过跟踪页面的访问时间,选择“最冷”的页淘汰。,用于在物理内存不足时,决定哪些内存页应该被换出到磁盘,以腾出空间加载新的内存页。CPU 多级缓存(L1/L2/L3)的替换策略也基于类似 LRU 的逻辑,淘汰最久未访问的缓存行。,从而尽可能保留高频使用的页面,减少后续缺页中断的发生。(链表顺序:A < B < C,C 是最近访问的页)。:循环遍历数组时,同一内存页会被频繁访问。(最近访问的页可能在短期内被再次访问)。

2025-02-28 10:46:59 807

原创 【高屋建瓴】彻底理解windows和linux的库连接

下,与 Windows 的 .lib。,不像 Windows 需要单独的。在 Windows 下,你可以用。在 Linux 下,生成静态库(在 Linux 下,生成共享库(不能直接被链接,因此需要一个。在 Windows 下,.lib。在 Linux 下,你可以用。在 Windows 下,来提供符号解析信息。所以,Linux 下。

2025-02-24 11:04:13 372

原创 OpenXLSX使用之demo5讲解(迭代器,row.cells())

该程序演示了如何使用OpenXLSX库通过迭代器高效处理Excel中的数据。与上一示例不同,这里利用了方法直接访问每一行的单元格,并通过迭代器进行读取和写入。该方式在处理大量数据时比传统的按单元格范围操作更加高效。程序的功能包括生成随机数据并写入文件、读取数据并统计非空单元格数量与计算总和。加粗样式。

2025-02-23 14:21:45 602

原创 OpenXLSX使用之demo6讲解(批量处理row数据)

这个示例程序演示了如何使用OpenXLSX库进行高效的Excel文件读写操作,特别是通过行范围(rows())进行数据操作。程序首先随机生成数据并写入Excel文件,然后重新打开文件并读取数据,计算并输出单元格的数量和所有单元格的总和。与按单元格范围操作相比,按行操作可以提高性能,尤其是在处理大量数据时。

2025-02-23 14:15:43 599

原创 OpenXLSX使用之demo5讲解(迭代器,range)

这个示例展示了如何使用OpenXLSX库通过迭代器和范围操作Excel单元格。程序生成一个随机数填充的Excel文件,保存并重新打开文件,然后计算并输出单元格的数量以及所有单元格的总和。通过使用OpenXLSX的range()方法,程序能够方便地定义一个单元格范围,并通过迭代器访问该范围内的每个单元格。这种方法使得操作Excel文档中的数据变得高效且直观。

2025-02-23 14:14:14 497

原创 OpenXLSX使用之demo4讲解(字符格式)

这个示例程序演示了如何使用OpenXLSX库处理Unicode字符,并在Excel单元格中插入不同语言的文本。通过使用库,程序确保即使在Windows系统中,控制台也能正确显示UTF-8编码的字符。这对于多语言支持和跨平台开发非常有用。

2025-02-23 14:10:50 814

原创 OpenXLSX使用之demo3讲解(格式,clone)

这个例子演示了OpenXLSX的工作表操作功能,包含了常见的工作表管理操作,如添加、删除、克隆和排序。它还展示了如何操作工作表标签的颜色和激活状态。

2025-02-23 14:09:19 523

原创 OpenXLSX使用之demo2讲解

该程序演示了如何使用OpenXLSX向Excel单元格添加公式,并且如何获取和打印公式。OpenXLSX目前仅支持向单元格添加公式,但不支持公式计算。公式计算需要通过Excel来完成。

2025-02-23 14:07:10 378

原创 OpenXLSX使用之demo1讲解

创建和保存 Excel 文件读写单元格日期时间处理评论操作工作表保护与密码设置单元格格式化与解锁这些操作展示了如何利用 OpenXLSX 来进行 Excel 文件的读取、写入、格式化以及其他相关功能。

2025-02-23 14:03:44 280

原创 解决Excel文件格式损坏问题:如何通过程序读取并复制内容

通过 Python 脚本结合 Excel 的 COM 接口,我们能够有效地读取损坏的.xls文件,提取其内容,并将其保存为新的.xlsx格式文件。这种方法对于大批量处理损坏的 Excel 文件非常有效,避免了人工操作的繁琐,并保证了数据的完整性。这种解决方案适用于需要修复损坏的.xls文件或在格式不兼容的情况下提取内容的场景。希望本文提供的解决方案能够帮助您解决类似问题,提升工作效率。

2025-02-22 21:04:32 1043

原创 libxls库的编译以及基于Visual studio的配置

以上步骤在你的环境下(MSYS2 MinGW64,路径)可生成。Debug 版本需添加。若只需库,禁用测试程序可简化流程。按步骤操作即可成功编译!

2025-02-22 13:13:55 1033

原创 激光安全等级 (研发或使用激光雷达硬件的筒子们重视)

最近有小伙伴不注意自己的眼镜,竟然对着激光头看,很不安全,即使是class2, 也不能一直盯着,所以给大家普及一下激光安全等级!(美国食品药品监督管理局标准)。它们将激光按功率和危害性分为多个等级,从完全安全到极度危险。国际上激光的安全等级主要依据。(国际电工委员会标准)和。

2025-02-18 18:42:54 638

原创 计算中位数的两种常见方法:直方图方法与直接排序方法

直方图方法通过统计数据值的频率并计算累计频率来求得中位数,适用于数据值范围较小、分布较均匀的情况。直接排序方法则通过对数据进行排序来直接获取中位数,适用于需要高精度计算的场景,尽管它的时间复杂度较高。最终,通过扫描累计频率数组,找到累计频率值等于数据总数一半的位置。如果数据的取值范围很大,可能需要为每个可能的数值创建一个数组或哈希表来存储其频率。了解了这两种方法的原理和复杂度后,你可以根据数据的特点选择合适的方法来计算中位数。,而且排序后的数据可以直接取中位数,查找中位数的时间复杂度是。

2025-02-12 15:51:52 410

原创 利用 MAD 计算标准差:理论与实践

在数据分析和统计处理中,我们通常使用标准差(Standard Deviation, SD)来衡量数据的离散程度。然而,标准差对于极端值(Outliers)非常敏感,一旦数据中存在异常值,计算结果可能会受到较大影响。本文将详细介绍 MAD 的概念、计算方法,以及如何基于 MAD 估算标准差,并推导其中的转换系数。要理解它的来源,我们需要深入分析 MAD 的性质。MAD 是一个简单但强大的统计工具,适用于各种抗噪分析场景。可以看到,MAD 计算出的标准差并未被异常值。的结果,证明了 MAD 的有效性。

2025-02-11 13:53:20 686

原创 【C++】 C++中的move和forward的联系和区别

在 C++98/03 中,对象的传递和赋值通常需要进行。

2025-01-10 10:25:20 825

原创 [Git] git rebase 的使用,不要动不动冲突了就git pull

merge:直接将指定分支的最新提交合并到当前分支,产生一个新的“合并提交(merge commit)”。rebase:把指定分支上的提交依次“移植”到当前分支的最新提交上。rebase 的本质是“将一系列提交复制并在新的基底之上重新应用”。执行 rebase 相当于在新的基础之上,重新“排演”原分支上的每一次提交(commit),因此也被称为“变基”。

2025-01-08 23:48:40 814

原创 Transformer 和 Attention机制入门

在自然语言处理领域,早期常使用循环神经网络(RNN)及其变体(如 LSTM、GRU)来处理序列数据,如机器翻译、文本生成等任务。随着序列长度增加,模型难以捕捉远距离词汇之间的关联,且训练会出现梯度消失或梯度爆炸等现象。训练时难以进行大规模并行计算,速度较慢。2017 年,论文《Attention is All You Need》提出了 Transformer 模型。Transformer 彻底摒弃了循环结构,转而依赖Attention 机制。

2025-01-07 23:09:32 1016

原创 [leetcode刷题算法总结] 回溯算法

下面给出一个常用的「回溯算法」C++ 代码示例,以及简要讲解。

2025-01-07 22:43:25 473

原创 如何找出OSS的引用所有的头文件

对于正式版本软件的release, 在release之前我们都要做一下OSS检查, 以防我们的代码引用了一些有一些不合适的license的第三方代码,正好最近有一个需求需要将我们所用到的OSS库的头文件全部取出来,对于OSS库, 我们正常用到哪些功能, 我们就引用哪些功能的库, 所以不可能将所有的头文件全部取出来, 那么如何正确的找到引用的部分,就需要借助编译工具了。Clang 是一个现代化的 C、C++、Objective-C 和 Objective-C++ 编译器,基于 LLVM 项目开发。

2024-12-27 19:11:36 421

原创 gcc和g++的联系和区别

gcc-x c++gccg++.c.c如果你用gcc编译 C++ 程序(比如.cpp而使用g++使用gcc编译 C 程序(比如.c。

2024-12-27 19:10:36 430

原创 [Visual studio] 性能探测器

最近发现VS的profile还是很好用的, 可以找到项目代码的瓶颈,比如发现CPU的每一个函数的时间占比,分析代码耗时分布,和火焰图一样的效果选择需要profile的启动项目将你要收集的信息打勾,比如CPU,GPU内存4. 然后点击开始,然后你会发现内存和CPU的实时占比状态5.收集一定的时间, 然后点击停止收集这个时候等一会, 它就帮你将收集到的数据进行整理生成报告,我写了一个简单的测试代码,只用到了CPU,所以以CPU的结果为例,分析结果。

2024-12-23 23:43:52 690

原创 静态语言类型和动态语言类型分类和区别

和是两种编程语言的类型系统特性,用于描述变量类型如何被定义、检查和使用。下面分别解释两者的概念和差异。

2024-12-04 11:05:35 340

原创 IOU Loss详解

*IoU(Intersection over Union)**是目标检测中常用的指标,用于评估预测框和真实框的重叠程度。基于 IoU 的损失函数(IoU Loss)是通过优化 IoU 值来提升模型预测框的精度。GIoU 引入了最小外包矩形(enclosing box),解决了预测框和真实框不相交时 IoU 为 0 的问题。DIoU 在 GIoU 的基础上引入了中心点之间的距离约束,解决了框之间位置关系优化不足的问题。CIoU 在 DIoU 的基础上增加了宽高比的惩罚项,使得预测框形状更接近真实框。

2024-11-28 23:21:26 819

原创 UML类图关系

图形类型关系类型方向含义实线箭头继承关系子类 → 基类类的继承虚线箭头依赖关系使用方 → 被使用方函数调用、参数、返回值等实线无箭头拥有关系(成员变量)类 A 和 类 B 之间一个类包含另一个类作为成员变量虚线无箭头友元关系类 A 和 类 B 之间一个类是另一个类的友元空心菱形线聚合关系拥有者 → 被拥有者一个类弱引用另一个类实心菱形线组合关系拥有者 → 被组合者一个类强引用另一个类。

2024-11-26 15:15:53 502

原创 C++迭代器和指针

迭代器和指针在 C++ 中有相似之处,因为它们都可以用来访问容器的元素,但两者本质上是不同的概念,以下从和。

2024-11-25 22:53:43 625

C++线程池的封装,实现任务队列的enqueue/dequeue

1. 实现任务类封装 2. 实现线程id,对象实例的map 3. 实现任务队列的enqueue/dequeu

2024-10-20

cuda vscode编译配置

初学cuda,利用vscode,nvcc的编译器编译可执行文件

2023-03-01

read_binary.py

python读取二进制文件,可以读取mipi的12bit

2021-07-29

doxygen的配置文件

当初试的时候,配置文件和头文件同一目录,而且我只有头文件

2021-07-08

call_count.h

主要的目的是为了写一个宏函数,可以方便的插入到函数,可以获得函数被调用了几次

2021-06-25

how_to_use_simpleperf_for_cachemisses_and_cpucycles.txt

simpleperf的使用方法,主要是如何获取cachemiss和cpucyle的报告,包含火焰图

2021-06-10

extras-master-simpleperf.tar.gz

simpleperf的开源代码,里面也有分析perf.data的工具

2021-06-10

vscode 利用cmakelist 的demo工程

该工程包主要是给大家一个base,开发C++项目用的,可以作为初学者或者对于vscode以及cmakelist不熟悉的usr使用

2020-11-25

VScode hello world

VScode 如何用camke进行编译调试的示例程序,可以作为基础的环境程序,基于VScode做C++的开发

2020-11-18

人脸样本库

主要用于机器学习,或者深度学习,作为训练样本使用的,便宜分享给大家

2018-10-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除