- 博客(49)
- 收藏
- 关注
原创 一 OpenCV中的数据类型
⑤ cv::Rect2f float表示的矩形。④ cv::Rect2i int表示的矩形。① cv::Point3_<T> 表示三维点。② cv::Rect_<float> float表示的矩形。② cv::Rect_<int> int类型的矩形。③ cv::Rect_<long> long表示的矩形。cv::Point p(int, int) 最常用。主要用来表示二维点,也有表示三维点的模板类型;向量,可以用来表示点。
2023-12-13 19:18:06
1040
原创 std::function
通过使用std::function,可以将不同类型的可调用对象封装成统一的格式,从而使用相同的接口进行调用;在设计回掉函数、事件处理 、函数对象等场景中十分有用。int result = myfunc(2) 调用封装的函数指针。2. 声明一个对象,返回类型(参数类型)3.2 封装lambda表达式。② 封装lambda。3.1 封装函数指针。3.3 封装成员函数。
2023-12-08 10:04:35
515
原创 不同类型变量的初始化
② d1.ptr(int(keypoints_1[m.queryIdx].pt.y)) 该行指针。③ d1.ptr(行号)[列号] 该列的像素值。三维点:cv::Point3f。1. 二维点:cv::Point2f。① ushort类型。
2023-12-08 00:33:28
431
原创 std::enable_shared_from_this
能够让一个对象(名称为t,并且被一个std::shared_ptr对象pt管理),安全生成其他额外的std::shared_ptr实例(名称为pt1、pt2),它们与pt共享t的所有权。当T的对象被shared_ptr对象pt管理时,调用T::shared_from_this(),将返回一个新的shared_ptr对象,并且与pt共享t的所有权;如果一个类T继承了std::enable_shared_from_this<T>,那么T类中就有了继承自父类的成员函数shared_from_this。
2023-11-25 16:05:04
570
原创 Transformer
Transformer会将所有的输入同时进行处理,忽略了单词之间的序列(先后)关系,所以。对于句子中的每个字,按照字进行切分,每个字会对应一个512维的字向量;下面的这几个参数是共享的,即100个词,共享这一套参数u、w、v。对于Transformer而言需要对输入进行位置编码;RNN会按照输入顺序,对每个字进行处理。1)输入部分:Embeding + 位置编码。2.1)embedding:NLP中范畴。2.3)RNN与Transformer。2.2)RNN输入形式。
2023-11-17 07:36:12
157
原创 【cmake】file、set、add_library
先将common_src、preprocess_src中的源文件路径组合到vision_source变量中,然后使用该变量作为源文件列表,将这些源文件编译成一个共享库。③ 使用add_library将vision添加到构建系统中,并将vision_source变量中的源文件添加到该。${common_src}用于引用common_src变量的值,将common_src中变量的值设置给。① 将路径中的文件保存到common_src变量中。使用变量的具体指,而不仅是变量的名称。设置变量,引用变量的值。
2023-11-15 13:58:07
243
原创 cudamemcpAsync
是CUDA(Compute Unified Device Architecture)中的一个函数,用于在主机(CPU)和设备(GPU)之间异步传输数据。它可以在主机和设备之间进行内存复制操作,而不会阻塞主机线程的执行。进行数据传输时,需要确保传输的数据是有效的,并且要在使用传输完成的数据之前进行同步。此外,还需要适当处理CUDA错误码,以确保数据传输的正确执行。在传输数据时,可以选择使用CUDA流来进行并行操作,以进一步提高效率。函数能够在主机和设备之间异步传输数据,从而提高性能。最后,释放已分配的内存。
2023-11-13 14:39:26
2228
原创 mat.data
mat.data是指向OpenCV图像或矩阵数据的指针,通过mat.data,可以获取指向图像像素数据的指针,支持访问、修改图像中的像素值。同一像素位置的三个值是相邻的。
2023-11-13 13:54:40
652
原创 dynamic_pointer_cast
用法:dynamic_pointer_cast是一个函数模板,接受两个参数,分别是要转换的指针和目标类型的指针类型。如果转换是引用类型,会抛出std::bad_cast异常。适用对象类型:dynamic_pointer_cast适用于智能指针类型,如std::shared_ptr和std::weak_ptr,用于进行智能指针的动态类型转换。dynamic_pointer_cast只适用于std::shared_ptr和std::weak_ptr类型的智能指针,用于进行智能指针的动态类型转换。
2023-11-13 07:59:39
2197
原创 cudaStreamCreateWithFlags
1. CUDA Runtime API中创建CUDA流的函数之一,允许创建一个CUDA流,并可以指定一些。2. ① pStream:指向cudaStream类型的指针,用于新创建的CUDA流;② flags: 用于设置流行为的标志位,可以设置不同的流类型。
2023-11-10 15:08:10
608
原创 对象池使用
对象池,就是一定数量创建好的对象的集合,当需要创建对象时,先从池中获取,若池中没有符合条件的对象,再创建新的对象;当线程池需要销毁时,不做真正的销毁,而是将其setActivate,并存入池中,从而避免大量创建对象。生命周期 处于对象池中对象的生命周期比较久,维持大量对象也比较占用内存;有向用户提供对象的接口,当没有对象时可创建对象存入其中,并返回给用户。对象池劣势:脏对象 对象被回收之后,仍保留调用时的数据,持有上次的引用,导致内存泄漏;有用户归还对象的接口。对象池特点:对象池中有已经创建好的对象。
2023-11-10 11:06:51
79
原创 alignas关键字
alignas关键字用来设置内存对齐方式,最小是8字节,可以是16、32、64、128字节。若为32位对齐,实际数据不到32字节,但内存还是会占用32字节;若实际数据大于32字节,小于64字节,则内存占用为64字节;计算机也会进行内存对齐,但是不同机器对齐方式不确定;内存对齐的计算方法就是对齐数的整数倍,
2023-11-09 16:51:48
342
原创 Eigen字节对齐问题
Eigen库为了使用SSE加速,在内存上分配了128位的指针,涉及字节对齐的问题,该种问题在编译时期不会报错,只会在运行时出现错误。
2023-11-08 20:28:06
459
原创 强制类型转换
dynamic_cast会对动态类型转换进行检查,动态类型转换分为向上转型、向下转型,其只会对向下转型进行检查,当向下转型不被允许时,dynamic_cast会进行阻止。C++对常量的处理过程类似于编译期间的#define,是一个值替换的过程,代码中所有的n在编译期间就已经被替换成了100;&a获取a的地址,地址的类型是const int*,使用constant_cast<int*>,可以将其转换为int*会对静态类型转换进行检查,若转换不被允许,则会被阻止;但是这里a的值与*p的值是不同的!
2023-11-08 19:24:47
82
原创 五 线程池
线程池一般是要复用线程,如果取一个task就分配个一个thread,执行完成之后再重新分配,是不现实的:c++的thread都是执行一个固定的函数,函数完成之后线程也就结束了。让每个thread创建之后,就去执行调度函数,循环获取task,然后执行;当线程池停止使用时,循环便停止,这样就保证了thread函数的唯一性,而且复用线程执行task;线程池中的线程会持续查询任务中是否有可用工作,当两个或者多个线程试图同时执行查询工作时,将会引发错误;所以,可以提前开辟好线程,等待任务来了之后进行处理。
2023-11-08 10:50:21
77
原创 联合概率密度关联算法
① 本次观测与目标匹配总共有L个可行事件,这L个可行事件构成了事件空间(观测与目标关联)2) 量测关联指示器:可行矩阵中每行除第一个元素之外的和,表示在可行联合事件i中,第j个观。3) 目标检测指示器:可行矩阵除第一列之外,其他列元素求和,表示在可行联合事件i中,第t个。第2个可行事件中,量测是否关联到了目标,目标是否关联到了量测;第n个可行事件中,量测是否关联到了目标,目标是否关联到了量测;6) 第1个可行事件中,量测是否关联到了目标,目标是否关联到了量测;1) 有效矩阵,可行矩阵。
2023-11-06 23:58:05
164
原创 [四] 条件变量
3)当线程获取通知被唤醒之后(notify_one等),wait( )会自动调用std::mutex的lock( )使用std::condition_variable可以让消费者线程等待生产者线程生产出数据之后,再进行消费,避。2)当前线程被阻塞时,wati( )函数自动调用std::mutex的unlock( )释放锁,使得其他被阻塞。1)当前线程中使用wait( )后之后将被阻塞,直到另外一个线程中使用notify_one,可唤醒当。1)当条件为false时,线程会被阻塞;在锁竞争上的线程能够继续;
2023-11-06 08:29:52
81
原创 可变参数模板
void f(T head, Args... args) <参数, 参数包>template<typename T, typename... Args> <类型, 类型包>在c++11之前,无论类模板、函数模板,都只能接受一组固定数量的模板参数;在c++11,引入了变参模板;
2023-11-05 12:05:24
110
1
原创 二 互斥量、lock_guard、unique_lock
lock_guard类构造函数被调用的时候自动加锁,构造函数被调用的时候自动解锁;(std::chrono::seconds(2)):如果无法获取锁,等待2s;mtx.lock();获取互斥量的所有权,互斥量的加锁。释放互斥量的所有权,互斥量的解锁。② std::defer_lock:不加锁,等待延迟。① std::timed_mutex:时间锁。):unique_lock的。
2023-11-03 08:08:04
91
原创 一 Thread线程库的基本使用
t.join( )在delete ptr前、后,得出的结果是不一样的。类中公有成员函数作为线程函数;类中私有成员函数作为线程函数;1.传入临时变量std::ref()4. 类中的函数、私有函数。
2023-11-03 07:52:05
82
原创 10.3 定制化操作 [p347]
test2接受2个参数,test2接收的2个参数,会作为test1的第3、5个参数;可以使用bind函数对参数进行重新排序,适用于比较大小的场景,使用bind函数对参数进行重新排序之后,不必在重新写一个函数。但是,对于find_if( )这种只能接受一元谓词的函数,使用接受两个参数的函数,来设置条件,就无法正常使用了;std::bind( )作为一个通用的函数适配器,接受一个可调用对象,并生成一个新的可调用对象。捕获列表只适用于局部非静态变量,表达式可以使用局部静态变量,以及所在函数之外的。
2023-11-02 20:24:38
135
原创 【CMake】常用命令
aux_source_directory(. src_list):查找当前目录下所有源文件,并将名称保存到。② aux_source_directory( ),查找某个路径下的所有源文件。② 如果某个目录的 CMakeLists.txt 中使用了该指令,其下所有的子目录默认也包含了。② O2(是字母opq的o,大写的欧)是用来调节编译时的优化程度的,最高为-O3,最低。相当于定义了一个宏, 只不过这个宏是在编译的时候定义的,相当于源程序中的。同一个目录下,有多个源文件时,
2023-11-01 00:22:42
668
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅