自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(429)
  • 资源 (1)
  • 收藏
  • 关注

原创 二进制人工智能 博客精选

机器学习的数学基础机器学习PytorchPython信号与系统图像处理与计算机视觉OpenCV C++ Python

2022-06-04 19:09:16 1486 1

原创 【C++面向对象编程】(二)this指针和静态成员

当我们创建一个类的多个对象时,这些对象的成员函数的代码是共享的,也就是说,无论我们创建多少个类的对象,这些函数的代码都只有一份。为了在这些共享的成员函数内部引用和修改特定对象的成员变量,C++提供了。类的静态成员(包括静态成员变量和静态成员函数)在所有类的对象之间是共享的,只存在于一个数据存储区域。类的非静态成员(包括成员变量和成员函数)是类的每个对象所独有的。指针传递自己的地址给该函数,以便函数能够访问和修改该对象的成员变量。指针是一个隐式的指针,它指向调用非静态成员函数的对象。使用C++17新增的。

2024-06-07 20:57:19 979

原创 【C++面向对象编程】(一)类,对象和四大机制(封装,继承, 多态 ,抽象)

当我们说“我的朋友叫张三”时,“张三”就是一个对象,他是根据“人类”这个类制造出来的具体实例。张三可能有他自己的名字、肤色、年龄等独特的属性,并且他的说话风格,走路姿势,思考方式等也会与其他人不同。对象:每一个对象都是根据类创建的具有其属性和方法的实例,并且具有唯一的身份标识(如内存地址)和自己独特的属性值。成员变量是类中的变量,用于存储与类相关的数据。封装隐藏了对象的内部实现细节,只暴露必要的接口,提高了代码的可维护性和安全性。换句话说,类的成员包括变量(也称为类的属性)和函数(也称为类的方法)。

2024-05-30 16:03:42 724

原创 【C++】GNU Debugger (GDB) 使用示例

如果使用CMake编译你的C++项目,并希望包含调试信息以便使用GDB进行调试,你需要在CMakeLists.txt文件中指定构建类型为Debug。GDB(GNU Debugger)是一种Unix下的程序调试工具,用于调试C、C++等编程语言编写的程序。中,编写一个简单的C++程序,该程序包含一个错误的函数。在项目的根目录下,创建一个构建目录并运行CMake。现在,我们已经构建了程序,可以使用GDB进行调试。首先,我们创建一个目录,并在其中创建必要的文件。函数中的错误,然后重新构建并再次调试。

2024-05-08 14:36:44 1066

原创 【C++泛型编程】(二)标准模板库 STL

C++ 的标准模板库(Standard Template Library,STL)旨在通过模板化的设计,提供一种通用的编程模式,使程序员能方便地实现和扩展各种数据结构和算法,提高程序的开发效率和执行效率。仿函数/函数对象是一个行为类似于函数的对象,可以被调用,并且可以在泛型编程中用作函数参数,用于定义算法的行为策略 (允许我们为算法提供自定义的比较、判断或操作规则)。关联式容器内部通常使用红黑树(对于有序的容器)或哈希表(对于无序的容器)来实现,以支持高效的查找、插入和删除操作。

2024-05-07 20:58:09 1034

原创 【C++泛型编程】(一)函数模板和类模板

C++泛型编程(Generic Programming)是一种编程范式,它允许程序员编写与参数无关的代码,也就是说这些代码可以在多种数据类型上重用,而无需为每个类型重新编写。函数模板允许程序员编写一个通用的函数,该函数可以接受不同类型的参数,并在编译时根据提供的参数类型生成特定的函数版本。类模板则允许你编写一个通用的类,该类可以在编译时根据提供的类型参数生成特定的类版本。全特化:全特化是指对模板的所有模板参数都进行特化处理。在使用类模板时,需要为模板参数指定具体的类型。这样的具体类型提供特定的实现。

2024-05-07 10:40:02 296

原创 【C++并发编程】(七)异步编程

在这个示例中,异步任务(计算5的平方)需要2秒钟来完成。异步编程(Asynchronous Programming)是一种编程模型,它允许程序在等待某个操作(如I/O操作、网络请求等)完成时,不阻塞当前线程的执行。在并发编程中,可以使用异步编程来避免线程阻塞,提高资源的利用率。这个函数接受一个可调用的对象(如函数、Lambda 表达式、函数对象等)作为参数,并在一个单独的线程(或可能是线程池中的线程,具体取决于实现)上异步执行它。,这时如果异步任务还没有完成,主线程将会被阻塞,直到结果可用。

2024-05-06 15:57:15 189

原创 【C++并发编程】(六)死锁问题

死锁(Deadlock)是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(或线程)称为死锁进程(或线程)。为了解决上述代码中的死锁问题,我们可以使用一种称为“锁顺序”或“锁排序”的策略,即确保所有线程都以相同的顺序请求锁。函数会尝试以原子方式锁定多个互斥锁,如果无法立即获得所有锁,它会阻塞直到所有锁都变得可用,或者抛出异常(取决于。来协调多个锁的锁定顺序了。

2024-05-06 09:17:50 369

原创 【C++并发编程】(五)原子操作

在多线程环境中,由于处理器缓存、指令重排和编译器优化等因素,内存访问的顺序可能并不总是按照代码中的顺序执行。原子操作通常比互斥锁具有更高的性能,但原子操作通常针对单个数据项(如一个整数或指针)进行,它们确保了对该数据项的访问是原子的,即不会被其他线程打断。原子操作是不可中断的操作,一旦开始,就必须完全执行完毕,不受其他线程干扰,可以确保多个线程在访问和修改共享数据时不会发生冲突,从而避免了数据竞争和相关的并发问题。类型提供了一系列操作保证了操作的原子性,即操作在执行过程中不会被其他线程打断。

2024-05-05 14:07:58 557

原创 【C++并发编程】(四)条件变量

条件变量(Condition Variable)用于线程间的同步,允许一个或多个线程在特定条件不满足时等待,并在条件满足时被其他线程唤醒。: 唤醒在该条件变量上等待的一个线程(如果有的话)。如果没有线程在等待,那么这个调用就没有效果。在这个例子中,我们创建了5个线程,每个线程都试图打印其ID。时,所有等待的线程都会被唤醒,并重新尝试获取互斥锁以继续执行。函数时,都会唤醒一个等待的线程来处理任务。因此,在需要使用条件变量(: 等待直到另一个线程调用该条件变量的。: 唤醒在该条件变量上等待的所有线程。

2024-05-04 15:24:35 353

原创 【C++并发编程】(三)互斥锁:std::mutex

当一个任务(或线程)持有互斥锁,且该互斥锁处于闭锁状态,那么这个任务可以执行访问共享资源的代码,其他任务(或线程)则不被允许。开锁后,该线程将失去了对互斥锁的所有权,其他正在等待的线程现在有机会获取这个互斥锁,以访问共享资源。如果互斥量当前没有被其他线程锁定(即它是可用的),则调用线程会成功获取锁,并继续执行其后续代码。如果互斥量已经被其他线程锁定,则调用线程会被阻塞(即它会停止执行,直到锁变得可用)。一旦线程获取了锁,它就可以安全地访问共享资源,而不必担心其他线程同时修改它。进行互斥锁的闭锁和开锁。

2024-05-04 13:04:03 778

原创 【C++并发编程】(二)线程的创建、分离和连接

在C++中,线程的分离(detach)和连接(join)是用于管理线程生命周期的两种主要方式。当创建一个线程时,你可以选择让它独立运行(即分离),或者等待它完成执行(即连接)。方法时,你告诉线程库你不再关心这个线程的结束时间,并且你不需要获取它的返回值。线程将在后台独立运行,直到其函数返回,结束。当你想在线程中执行某个有参数或无参数的函数时,你可以将该函数传递给。方法时,你告诉线程库你想要等待这个线程完成执行后再继续下去。你还可以传递类的成员函数和类的实例给线程。的线程将被阻塞,直到被连接的线程执行完毕。

2024-05-03 23:17:05 872

原创 【C++并发编程】(一)基本概念

多进程可以利用多核处理器,实现真正的并行处理。除此之外,还可以通过在同一时间段内,交替执行多个任务实现并发(多线程),只要交替的速度够快,在宏观上看起来就像是并行的。C++标准并未对进程间通信提供任何原生支持,所以使用多进程的方式实现,这会依赖与平台相关的API。线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位,使用进程所拥有的资源,并由进程中的一个执行序列来执行。进程是操作系统进行资源分配和调度的基本单位,它拥有独立的内存空间和系统资源,负责执行一个特定的程序或任务。

2024-05-02 21:39:12 773

原创 【C++】C++ 11 新特性:使用示例

是一个引用计数智能指针,它在构造时会将引用计数初始化为 1,每当有新的 std::shared_ptr 指向相同的对象时,引用计数加 1,当有 std::shared_ptr 超出作用域或被显式置为 nullptr 时,引用计数减 1。关键字用于显式指示一个成员函数覆盖了基类中的虚函数,它可以帮助检测错误,如果子类中的函数并没有正确地覆盖基类中的虚函数,编译器将产生错误。智能指针用于管理动态分配的内存的智能对象,可以在对象不再被使用时自动释放内存,避免了内存泄漏和悬空指针的问题。用于推导表达式的类型。

2024-05-01 00:38:30 1250

原创 【Numpy】np.add.at 示例

【代码】【Numpy】np.add.at 示例。

2024-04-29 14:09:21 215

原创 【Pytorch】(十五)模型部署:ONNX和ONNX Runtime

ONNX Runtime(ORT) 是一个用于运行和执行 ONNX 模型的推理引擎。ONNX Runtime 提供了高性能、低延迟的深度网络模型滚推理,并且是跨平台的,支持各种操作系统和设备。为了验证ONNX Runtime和PyTorch原始网络模型计算的值是否近似,我们在一个进程进行。在使用ONNX Runtime进行推理之前,我们先使用ONNX API检查ONNX模型。指定,否则所有输入尺寸的输出ONNX图形中的输入大小都是固定的。将PyTorch中定义的模型转换为ONNX格式。

2024-04-25 16:29:27 1955

原创 【Pytorch】(十四)C++ 加载TorchScript 模型

要在C++中加载序列化的TorchScript模型,必须依赖于PyTorch C++API(也称为LibTorch)。最新的稳定版本的LibTorch可以从。下面将使用CMake和LibTorch构建一个C++应用程序,该应用程序加载并执行一个序TorchScript模型。以下内容将介绍如何在C++环境下加载和运行TorchScript 模型。include/文件夹包含程序需要包含的头文件,应该是解压缩的libtorch的完整路径。lib/文件夹包含必须链接的共享库,将Step 1相同的。

2024-04-25 10:32:20 803

原创 深度学习推理框架汇总

它支持跨平台部署,包括 CPU、GPU、移动设备等,并提供了 C++、Python 和 Java 等多种语言的 API。它提供了高性能、可扩展、灵活的模型部署和推理服务。TensorRTX:TensorRTX 是英伟达推出的一款基于 TensorRT 的深度学习推理框架,提供了更多的优化和扩展功能,适用于高性能和低延迟的推理需求。OpenVINO 是英特尔推出的深度学习推理工具包,支持针对英特尔 CPU、GPU、VPU(Vision Processing Unit)等硬件进行优化的推理。

2024-04-24 20:57:29 524

原创 【Pytorch】(十三)模型部署: TorchScript

用于将一个具体的输入示例追踪(trace)模型的一次计算过程,从而生成一个 TorchScript 模型。对于动态控制流(如条件语句),它只会记录每个分支中的一种情况。因此,它不适用于无固定形状输入、具有动态控制流的模型。用于将整个 PyTorch 模型转换为 TorchScript 模型,包括模型的所有逻辑和控制流。script适用于无固定形状输入、具有动态控制流的模型。但是,它可能会把保存一些多余的代码, 产生额外的性能开销。因此,可以将两者混合使用,扬长避短。

2024-04-24 19:32:27 1689 2

原创 【C++】项目级的组织结构与Cmake编译

并在其中写函数的定义。:存放编译生成的对象文件。,并在其中写函数的声明。(1) 创建后缀名为。(2) 创建后缀名为。:存放可执行程序文件。将在bin目录下生成。

2024-04-23 16:20:10 493

原创 【数字图像处理】二值图和灰度图的形态学处理

也就是说用结构元素找出在目标图像内部可以完全放下该结构元素的值为 1 的区域。腐蚀具有缩小图像中的物体和消除图像中比结构元素小的成分的作用。将原图中的一个非零点不断膨胀,然后与原图相交,得到连通分量,之后将连通分量从原图去掉;求某点的腐蚀运算就是计算该点结构元素覆盖范围内各点最小值作为该点的腐蚀结果。求某点的膨胀运算就是计算该点局部范围内各点的最大值作为该点的膨胀结果。经膨胀运算后,图像亮的区域范围将扩大。使用击中击不中获取与结构元素相同形状的图像边缘像素,然后将其删除,通过迭代多。, 那么称B击不中A。

2024-04-02 19:29:14 1102

原创 【Vim】单行与多行缩进

单行缩进多行缩进

2024-04-02 10:23:41 440

原创 【数字图像处理】颜色空间的转换

HSI/ HSV 颜色空间模型是从人的视觉系统出发, 用 H (Hue)、 S(Saturation)、 I(Intensity) 或 V(Value) 分别代表色调、 色饱和度、 亮度三种独立的颜色特征。CMY 颜色空间正好与 RGB 颜色空间互补, 即用白色减去 RGB 颜色空间中的某一颜色值就等于这种颜色在 CMY 颜色空间中的值。YCbCr 颜色空间采用一个亮度信号 (Y) 和两个色差信号 (Cb , Cr ) 来表示。对于[0,1]的 R、G、B 值,HSV 各个分量计算如下。

2024-04-01 14:46:33 1119

原创 【数字图像处理】图像的最近邻插值、双线性插值和双三次插值

用OXY表示H×W的原始图像,GXY表示H×Y的目标图像。

2024-04-01 10:53:38 930

原创 【数字图像处理】图像的频域滤波

高斯陷波滤波器:陷波滤波器可以阻止或允许以某个频率为中心的邻域里的频率通过,例如,设。分别为两个频率中心到矩阵中包含的任意一点。是频率矩阵中心到矩阵中包含的任意一点。竖直条纹噪声反应在频谱图中的。高频提升滤波器是高通加全通。

2024-03-28 09:50:34 657

原创 【数字图像处理 】 灰度变换增强图像

对数变换的作用是对图像的低灰度范围进行扩展,并对高灰度范围进行压缩,得到的结。时,扩展图像暗区、压缩图像亮区。暗区对比度增强、亮区对比度减弱。时,压缩图像暗区,扩展图像亮区。暗区对比度减弱,亮区对比度增强。直方图均衡化映射函数。

2024-03-26 21:12:14 937

原创 【数字图像处理】改变图像灰度级别

灰度级别为4时,原始图像中属于[0, 64)的值被量化为0,属于[64,128)的值被量化为64,属于[128,192)的值被量化为128,属于[192, 256)的值被量化为192.灰度级别为2时,原始图像中属于[0,128)的值被量化为0,属于[256)的值被量化为128。灰度级别256,128,64,32,16,8,4,2 对应。改变图像灰度级别与压缩量化的区别?首先,进行灰度级量化。

2024-03-26 10:36:30 1234

原创 【OpenCV C++&Python】(五)图像平滑(模糊)

高斯滤波它在滤除图像中噪声信号的同时,也会对图像中的边缘信息进行平滑。下面简单介绍OpenCV中常用的滤波方法,包括均值滤波、高斯滤波中值滤波和双边滤波。最常见的滤波器是线性的,其输出的像素值(即。高斯滤波是线性的,通过高斯核与输入图像的卷积进行计算,在OpenCV中可以通过函数。图像平滑,又称图像模糊,是一种简单而常用的图像处理操作,常用于图像去噪。中值滤波器遍历图像的每个元素,并将每个像素替换为核区域内所有像素的中值。输出的每个像素是它的核覆盖的所有像素的平均值。均值滤波(核大小递增:1,3,5,…

2024-03-22 11:05:22 1418

原创 多进程并发 v.s.多线程并发

如果任务需要大量的数据共享和高效的任务切换,那么多线程可能更加适合,因为线程间的上下文切换比进程要快且共享同一进程的内存空间。如果任务需要更多的数据隔离和安全性,多进程可能是更好的选择,因为进程拥有独立的内存空间。

2024-03-19 10:01:57 508

原创 【PCL】(三十四)基于八叉树的点云空间变化检测

【代码】【PCL】(三十四)基于八叉树的点云空间变化检测。

2024-03-18 19:06:47 413

原创 【PCL】(三十三)八叉树搜索

八叉树是一种用于管理稀疏三维数据的基于树的数据结构。每个内部节点正好有八个子节点。在本教程中,我们将学习如何在点云数据中使用八叉树进行空间分区和邻居搜索。特别地,我们解释了如何执行“体素搜索中的邻居”、“K最近邻居搜索”和“半径搜索内的邻居”。

2024-03-18 17:03:33 348

原创 【PCL】(三十二)ICP配准

【代码】【PCL】(三十二)ICP配准。

2024-03-18 15:28:59 348

原创 【PCL】(三十一)基于对应分组的三维物体识别

作为模板,通过特征聚类在。中识别出相似的3D物体。

2024-03-14 19:43:20 398

原创 【PCL】(三十) ModelOutlierRemove滤波

以下代码实现滤除点云中不属于球模型的异常点。

2024-03-11 10:52:16 366

原创 【PCL】(二十九)渐进形态学滤波器分割地面点

【代码】【PCL】(二十九)渐进形态学滤波器分割地面点。

2024-03-11 10:14:59 586

原创 【PCL】(二十八)点云超体素分割

【代码】【PCL】(二十八)超体素聚类分割点云。

2024-03-10 20:36:37 419

原创 【PCL】(二十七)基于法线差的点云分割

计算法线差(Difference of Normals (DoN));根据设定的法线差阈值过滤点;对剩余的点进行欧几里得分割。在大尺度的范围内(半径。)估计每个点的法线;在晓尺度的范围(半径。)估计每个点的法线;

2024-03-09 15:12:26 809

原创 【PCL】(二十六)自定义条件的欧几里得聚类分割点云

以下代码实现自定义条件对点进行欧几里得聚类分割。

2024-03-08 16:28:02 809

原创 【PCL】(二十五)基于Min-Cut的点云分割

【代码】【PCL】(二十五)基于Min-Cut的点云分割。

2024-03-08 14:57:11 399

原创 【PCL】(二十四)基于颜色的区域生长分割点云

二是在分割之后,合并具有相近颜色的簇,将平均颜色值具有较小差异的两个相邻聚类合并在一起。另外,如果一个簇的点数如果小于用户定义的值,则将与其最近的相邻簇合并。一是它使用颜色值判断点是否属于一个聚类簇,而不是法线。基于颜色的区域生长分割与。

2024-03-08 10:27:11 470

基于法线差的点云分割 数据

基于法线差的点云分割 数据

2024-03-09

基于法线差的点云分割 数据样例

基于法线差的点云分割 数据样例

2024-03-09

PCL(十八)从距离图像中提取点云的边界 数据

PCL(十八)从距离图像中提取点云的边界 数据

2024-03-05

PCL (十七)距离图可视化 点云数据

PCL (十七)距离图可视化 点云数据

2024-03-04

实例讲解Dataset 和 DataLoader的 zoro数据集

【pytorch】(二)实例讲解Dataset 和 DataLoader 用到的数据

2022-01-22

空空如也

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

TA关注的人

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