自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 C++面试5题--8day

这三个概念都与函数同名相关,但发生在不同的作用域,有着本质的区别。重载:通常是同一个类或命名空间。函数名相同,但参数列表必须不同(参数的个数,类型或顺序不同)。返回类型不能作为区分重载的依据。它们是完全不同的、独立的函数,只是名字恰好相同。编译器再编译时,会根据你调用时提供的参数来决定具体执行哪一个版本的函数。这是一种静态多态(编译时多态)。覆盖:发生在派生类和基类之间。函数必须是虚函数(基类中用virtual声明),函数名,参数列表,返回类型,const属性等必须完全相同。

2025-08-02 10:49:39 488

原创 C++面试5题--7day

它不增加引用计数,它的存在不会影响对象的生命周期。它是一个类,通过封装一个原始指针,来自动管理这块指针所指向的内存的生命周期。总而言之,在C++中,我们应该始终使用new和delete来管理对象的生命周期,只有在需要C语言库交互或者进行一些非常底层的内存操作时,才可能用到malloc和free.因为它没有被赋予一个确切的地址(比如nullptr或一个有效对象的地址),所以它内部存储的是一个随机的、垃圾值。野指针和悬空指针都是指向了非法内存的指针,是程序中非常危险的“定时炸弹”,但它们的成因略有不同。

2025-08-01 11:00:04 722

原创 C++面试5题--6day

C++的内存管理机制,无论是栈上的自动分配,还是堆上的动态申请,最终都是在这个巨大的“数组”上划分出的一小块区域,并赋予其特定的生命周期和访问规则,以支持程序的复杂逻辑。它能将动态分配的堆内存与栈上的指针变量关联起来,也能作为函数参数,让函数有能力修改调用者的数据,或者高效地传递大型对象而无需进行昂贵的复制。2.指针传递:函数接收的是一个指向原始变量的地址的副本。这三者是C++中函数参数传递的主要方式,它们的核心区别在于函数内部对参数的操作是否会影响到函数外部的原始数据,以及传递的开销。

2025-07-31 16:15:36 744

原创 C++面试5题--5day

不过,如果这个类里包含了虚函数,那它的大小就不再是一字节了,而是一个指针的大小,因为需要存放指向虚函数表的虚指针。基类的析构函数可以是虚函数,而且在很多情况下是必须的。当您通过一个基类指针去删除一个派生类对象时,如果析构函数不是虚的,系统只会调用基类的析构函数,派生类的析构函数就不会被执行,这回导致派生类中分配的资源无法释放,造成内存泄漏。而如果将基类的析构函数声明为虚函数,那么在删除时,系统会通过多态机制正确地先调用派生类的析构函数,然后再调用基类的,从而保证整个对象被安全、完整的销毁。

2025-07-28 16:58:57 247

原创 从像素到频率:OpenCV傅里叶变换

想象一下,你听到一段复杂的交响乐。在我们的耳朵里,它是一个随时间变化的、连续的声音信号。但如果你是一位音乐家,你可能会立刻分辨出其中包含了小提请的高音、大提琴的低音和钢琴的和弦。傅里叶变换做的就是同样的事情。它能将一个复杂的信号(比如图像)分解成一系列简单的正弦波和余弦波(也就是它的“频率成分”)。空间域 (Spatial Domain):就是我们通常看到的图像,由一个个像素点排列而成。这就像我们听到的交响乐。频域 (Frequency Domain):通过傅里叶变换后得到的世界。

2025-07-28 15:17:44 644

原创 C++面试5题--4day

每个包含虚函数的对象实例,其内部都会有一个隐藏的虚指针(vptr),这个指针在对象构造时会指向其所属类的虚函数表。当通过基类指针调用虚函数时,系统就是通过这个对象的vptr找到正确的vtable,再从表中找到对应函数的地址并执行调用,从而实现了在运行时根据对象的实际类型来动态绑定函数。其核心实现机制是虚函数表(vtable)和虚指针(vptr),每个包含虚函数的对象都有一个vptr指向其类的vtable,程序在运行时通过vptr查找vtable,从而调用到对象实际类型的那个虚函数版本。

2025-07-14 16:45:03 240

原创 揭开图像的秘密:OpenCV直方图入门详解

想象一下,我们有一张8-bit的灰度图。这意味着每个像素的亮度值都在0(纯黑)到255(纯白)之间。直方图的X轴代表像素的亮度值(0-255),而Y轴代表具有该亮度值的像素数量(频率)。图像类型对应的直方图特点偏暗的图像直方图的大部分数据会集中在X轴的左侧(低亮度值区域)偏亮的图像直方图的大部分数据会集中在X轴的右侧(高亮度值区域)低对比度图像直方图的数据会记载一个很窄的区域里,说明像素的亮度变化不大高对比度图像直方图的数据会分布在X轴的大部分区域,说明图像同时包含了很暗和很亮的像素。

2025-07-14 14:51:42 783

原创 OpenCV探索之旅:多尺度视觉与形状的灵魂--图像金字塔与轮廓分析

恭喜你,探索者!你已经从一个只能看到像素和边缘的初学者,成长为了一位能够理解和度量“形状”的分析师。

2025-07-10 15:03:07 1104

原创 OpenCV探索之旅:揭秘Sobel与Canny背后的代码(含数学原理)

在上一篇的旅程中,我们见证了如何从一张普通的图像中,通过Sobel和Canny的“魔法”,提取处清晰的世界轮廓。我们知道了它们能做什么,但一位真正的探索者绝不会止步于此。我们更渴望知道,这魔法背后隐藏的咒语(函数参数)是什么?驱动这一切的古老卷轴(数学原理)又记载着怎样的奥秘?今天,就让我们一同揭开和的神秘面纱,深入其内部,理解每一个参数的含义,并深究其坚实的数学基石。

2025-07-09 16:47:01 826

原创 Opencv探索之旅:从像素变化到世界轮廓的奥秘

梯度”听起来像是一个复杂的数学术语,但它的核心思想却异常直观。想象一下,你正行走在一片由灰度图像构成的数字山峦上,每个像素的灰度值(0-255)就是你所在位置的海拔。当你身处在一片颜色均匀的区域,比如天空或墙壁,你就像在平原上漫步,海拔几乎没有变化。但当你从黑色的桌面走到白色的墙壁时,就如同来到了一座悬崖边,海拔发生了急剧的、断崖式的变化。**图像梯度,就是用来衡量这种“海波”变化剧烈程度的指标。**梯度越大的地方,就意味着像素值变化越剧烈,也就越有可能时我们肉眼所见的“边缘”。恭喜你!

2025-07-09 14:20:27 1208

原创 C++面试5题--3day

多态则允许使用基类的指针或引用来调用派生类中重写的同名函数,通过虚函数机制,程序可以在运行时动态地决定调用哪个对象的哪个版本的函数,从而实现了”一个接口,多种实现“的灵活性和可拓展性。C++中的mutable关键字是用来突破const成员函数的限制的。当一个类的成员函数被声明为const时,它承诺不会修改对象的任何数据成员,但有时我们希望某些成员(例如用于同步的互斥锁、用于缓存的变量或用于调试的计数器)即使在const函数中也能够被修改,这时就可以将这些成员声明为mutable。

2025-07-08 14:33:45 339

原创 OpenCV探索之旅:形态学魔法

恭喜你!你已经掌握了OpenCV中形态学转换的核心思想。它不再是简单的像素值加减或平均,而是一种更高级的、基于形状的分析和处理工具。

2025-07-08 14:00:29 914

原创 C++面试5题--2day

它们在C++中最核心的技术区别仅在于默认访问权限:class的成员和继承默认是私有的,而struct则默认是公有的。但在工程实践中,我们更多是依据一种设计约定来使用它们,即struct来定义纯粹的数据聚合体,其数据成员通常是公开的;而class 来定义具有复杂行为和封装需求的抽象数据类型,通过私有成员保护数据,通过公有接口提供服务,以此来清晰地传达代码的设计意图。

2025-07-04 11:46:53 310

原创 OpenCV图像处理基础:图像滤波解析(含数学原理)

我们从简单的均值滤波的,到考虑距离权重的高斯平滑,再到对抗极端噪声的中值选择,最终到兼顾空间和色彩相似度的双边滤波。每一种滤波器都不是万能的灵药,而是针对特定问题、在效果与效率之间权衡的智能结晶。

2025-07-04 11:12:41 613

原创 C++面试五题-1day

关于大端序、小端序和网络字节序,它们描述的是当一个多字节数据(比如一个Int)在内存中存储时,其字节的排列顺序。大端序是指数据的高位字节存放在内存的低地址处,低位字节存放在高地址处,这比较符合我们人类的阅读习惯。小端序则正好相反,是数据的低位字节存放在内存的低地址处。之所以要有字节序这个概念,是因为不同的CPU架构,比如我们常用的x86平台是小端序,而一些服务器或者网络设备可能采用大端序。

2025-07-03 11:27:47 270

原创 OpenCV图像处理基础:图像阈值解析(含数学原理)

阈值处理是计算机视觉工具箱中一把不可获取的瑞士军刀。它以简单而强大的方式,为我们清理数据、分离主体、简化问题。掌握了这些阈值处理技术以及背后的原理,就意味着你已经迈出了从原始像素到高级图像理解的关键一步。这不仅是分割图像的技巧,更是开启更复杂视觉分析任务大门的钥匙。

2025-07-03 10:30:06 605

原创 OpenCV图像处理基础:图像透视变换解析(含数学原理解析)

想象一下,我们眼前的世界是一个三维空间,而我们的视网膜或相机传感器是一个二维平面。透视变换,本质上就是模拟这个从3D到2D的投影过程。它最核心的特征,是完美复现了“近大远小”的视觉规律。在透视投影中,三维世界里的平行线在二维图像中可能不再平行,它们会朝着一个共同的消失点汇聚,正如远方的铁轨。这使得透视变换与我们可能更熟悉的仿射变换有了本质区别。仿射变换是二维平面内的“游戏”,它可以对图像进行平移、旋转、缩放和剪切,但它有一个铁律:保持平行线的平行性。一个矩阵经过仿射变换,最多变成一个平行四边形。

2025-07-02 11:50:07 691

原创 OpenCV图像处理基础:图像仿射变换解析(含数学原理解析)

现在我们可以回答这个关键问题了。我们的变换矩阵MMMabcdtxtyabcdtx​ty​。x′axbytxy′cxdytyx′axbytx​y′cxdyty​​为了解出这6个未知数,我们需要建立一个包含6个方程的方程组。每一对已知的对应点(源点xy(x, y)xy和目标点x′y′(x', y')x′y′)都能为我们提供两个方程。因此,我们需要3对对应点来建立一个包含3。

2025-07-01 16:07:37 618

原创 OpenCV图像处理基础:图像缩放插值解析(含数学原理)

插值方法数学核心优点缺点适用场景 (主要)计算成本四舍五入取整最快质量差,块状,锯齿速度优先,质量其次非常低2x2邻域线性加权速度与质量的良好平衡 (默认)轻微模糊通用缩放,默认选择低4x4邻域三次多项式质量较高,更清晰较慢,可能边缘振铃放大时追求高质量中等INTER_AREA像素区域求平均缩小图像时抗混叠效果好不适合放大 (同NEAREST),可能较慢缩小图像,避免莫列波纹中到高8x8邻域Sinc窗函数质量非常高,非常清晰最慢,可能边缘振铃更明显。

2025-07-01 11:00:28 1871

原创 OpenCV图像处理基础:打造你的视觉魔法棒

恭喜你!现在你已经学会了如何使用纯 OpenCV 来实现和展示这些核心的图像处理基础技术。通过直接操作和显示图像,你可以更直观地理解每个步骤的效果。颜色空间转换几何变换阈值处理图像平滑这些都是计算机视觉中不可或缺的工具。接下来该做什么?更改 prepare_for_display 函数中的 target_width 和 target_height,或者修改滤波器的核大小、阈值等参数,观察效果。尝试将这些技术链式应用,例如:灰度化 -> 高斯模糊 -> 自适应阈值。OpenCV 的功能远不止于此。

2025-06-25 14:25:59 722

原创 OpenCV入门:掌握图像基本操作,开启视觉之旅!

恭喜你!你已经学习了 OpenCV 中最核心的图像基本操作。这些操作是你进行更高级图像处理任务(如颜色空间转换、几何变换、阈值处理等)的基础。

2025-06-23 14:27:17 1065

原创 揭开计算机视觉的神秘面纱:从像素到数字图像

构成图像的最小单元。定义颜色如何表示和量化的系统,常见的有灰度、RGB、BGR 和 HSV。图像在计算机中以数字矩阵(通常是 NumPy 数组)的形式存储,灰度图是 2D 矩阵,彩色图是 3D 矩阵。像素:* 构成图像的最小单元。定义颜色如何表示和量化的系统,常见的有灰度、RGB、BGR 和 HSV。图像在计算机中以数字矩阵(通常是 NumPy 数组)的形式存储,灰度图是 2D 矩阵,彩色图是 3D 矩阵。掌握了这些基础概念,你就迈出了学习 OpenCV 和计算机视觉的重要一步。

2025-06-21 15:51:37 1149

原创 掌握OpenCV的基石:NumPy入门教程(为计算机视觉打下坚实基础)

NumPy的核心是ndarray对象。它是一个多维数组,用于存储同类型的元素(通常是数字),比如整数(int)或浮点数(float)。与Python列表的区别:类型统一:NumPy数组中的所有元素必须是相同的数据类型,这使得存储和计算更高效。性能:NumPy数组操作通常比等效的Python列表操作快得多,尤其是在大数据集上。功能:NumPy提供了大量针对数组优化的数学函数。恭喜你!ndarray 对象及其与 Python 列表的区别。创建数组的多种方法。获取数组的关键属性,如形状、数据类型。

2025-06-20 11:38:00 437

原创 [OpenVINO]告别等待 ,拥抱丝滑:异步推理让你的AI应用快起来

这段代码优雅地展示了如何使用OpenVINO的异步API和简单的队列管理来实现一个高效的推理请求池。创建多个 InferRequest 对象。用队列管理空闲和工作中的请求。使用 start_async() 提交任务而不阻塞。使用 wait_for(0ms) 或 try_wait_for() 非阻塞地检查任务完成状态。将帧数据与推理请求关联,以便结果出来后能正确匹配。

2025-06-18 18:39:15 1074

原创 openvino入门:轻松调用预训练模型进行图像识别(你的第一个目标检测程序!)

OpenVINO™ (Open Visual Inference & Neural network Optimization) 是一个用于优化和部署深度学习模型的综合工具套件。

2025-06-18 16:10:12 659

原创 揭秘C++ IPC:多进程协作的艺术与实践

本文深入探讨C++中的进程间通信(IPC)机制,重点分析了多进程编程的优势与实现方式。文章首先对比了多进程与多线程的区别,指出多进程在资源隔离、安全性和多核利用等方面的重要价值。随后详细介绍了两种核心IPC思想:共享数据和消息传递。

2025-06-16 15:08:40 880

原创 庖丁解牛:从“任务”到“效率“--深入理解进程、线程与协程(C++)

通过这篇博客,我们由浅入深地探讨了进程、线程和协程这三个重要的并发概念。进程是程序执行的独立实例,拥有独立的资源。线程是进程内的执行单元,共享进程资源,通过操作系统实现抢占式并发。协程是用户态的、协作式的并发单元,通过主动挂起/恢复实现超轻量级并发。在C++中,使得多线程编程成为标准,但需要注意数据同步的复杂性。C++20协程的引入,则为我们提供了更强大、更优雅的异步编程和高并发解决方案。选择哪种并发模型,取决于你的应用场景和性能需求。单核CPU上,多线程/多进程是并发,而多核CPU上,它们是并行。

2025-06-13 11:19:32 576

原创 搞懂C++异常处理:你的代码再也不怕“突然崩溃”!

C++中异常的类型非常灵活:1.标准库异常C++标准库提供了一系列预定义的异常类,它们都继承自std::exception。这使得你可以用统一的方式来处理各种标准错误。一些常用的标准异常包括:std::exception:所有标准异常的基类。std::bad_alloc:当new运算符失败(内存分配失败)时抛出std::bad_cast:当dynamic_cast失败时抛出std::logic_error:表示程序中出现的逻辑错误,例如:std::domain_error:参数超出有效范围。

2025-06-12 14:06:29 978

原创 揭秘C++ Lambda表达式:现代C++的匿名函数利器

这篇博客详细介绍了 C++ Lambda 表达式,这一 C++11 引进的强大特性。Lambda 表达式本质上是匿名的、内联的函数对象,能够极大地提升代码的简洁性、可读性和灵活性。文章深入解析了 Lambda 的语法结构,包括至关重要的“捕获列表”(值捕获 [var]、引用捕获 [&var]、隐式捕获 [=] / [&])及其在 C++14 中增强的“通用捕获”功能,并阐述了 mutable 关键字的作用。

2025-06-11 18:13:16 847

原创 洞察三维世界:深度双目相机入门指南(补充篇:相机内参与外参的深度解析)

相机标定的关键是确定内参和外参两类参数。内参描述相机自身特性,包括焦距(影响成像大小)、主点(光心投影位置)和畸变系数(矫正透镜缺陷);内参矩阵将三维点投影到图像平面。外参描述相机在世界中的位置和姿态,由旋转矩阵(朝向)和平移向量(位置)组成。在双目系统中,右相机外参相对于左相机尤为重要,其平移分量构成深度计算的基线。通过外参将世界坐标转为相机坐标,再由内参投影到像素坐标,两者协同完成三维到二维的映射。精确标定这些参数是实现高精度深度计算的基础。

2025-06-04 16:46:52 1064

原创 洞察三维世界:深度双目相机入门指南

摘要:深度双目相机通过双摄像头模拟人眼立体视觉,利用视差计算物体深度信息。其核心技术包括相机标定、立体校正、视差匹配算法和深度图后处理。相比其他深度测量技术,双目相机具有被动工作、成本较低等优势,但也面临纹理依赖、计算量大等挑战。目前广泛应用于机器人、自动驾驶、AR/VR等领域。随着AI技术和硬件的进步,双目相机正朝着智能算法、多传感器融合方向发展,将在未来智能世界中发挥更大作用。

2025-06-04 15:17:39 1239

原创 告别手动管理内存:C++智能指针完全指南 [特殊字符]

这篇博客全面介绍了C++智能指针,旨在解决手动内存管理带来的内存泄漏、悬空指针等问题。文章详细阐述了三种核心智能指针:std::unique_ptr(独占所有权,轻量级且不可复制但可移动)、std::shared_ptr(通过引用计数实现共享所有权)、以及std::weak_ptr(非拥有型指针,用于配合shared_ptr打破循环引用)。博客强调了使用std::make_unique和std::make_shared进行安全创建,并提供了选择合适智能指针的指南和最佳实践,最终帮助开发者编写更安全、健壮且易

2025-05-28 18:38:05 800

原创 告别复制的烦恼:深入理解 C++ 的左右值引用、std::move 和 std::forward

本文深入解析C++11引入的右值引用及其相关概念。首先区分左值(持久对象)和右值(临时值),介绍右值引用(&&)的语法和用途。重点讲解移动语义的实现原理,通过MyString类示例展示移动构造/赋值如何避免深拷贝。随后剖析std::move的本质——将左值强制转换为右值引用以启用移动语义。最后探讨完美转发机制,包括引用折叠规则、万能引用概念,以及std::forward如何保持参数原始值类别(左值/右值)进行转发。通过代码示例对比,清晰展示这些核心概念在实际编程中的应用场景和优势。

2025-05-24 18:10:02 697

原创 ROS2 Jazzy机器人导航navigation2 参数文件分析

Ros2 jazzy版本的Navigation参数配置文件的解析,仅提供参考学习使用。

2024-11-27 15:46:38 2059 1

原创 读取目录下的图片写入剪切板然后发送到qq窗口

可以自动读取文件夹下的图片并发送

2022-11-23 17:58:29 414 1

空空如也

空空如也

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

TA关注的人

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