- 博客(58)
- 收藏
- 关注
原创 opencl的简单介绍以及c++实例
OpenCL是由Khronos Group提出的开放异构计算标准,支持CPU、GPU等多种计算设备。其架构包含平台模型、执行模型和分层内存模型。编程流程包括获取设备信息、创建上下文、编写Kernel程序和执行计算等步骤。相比CUDA,OpenCL具有跨平台、开放等优势,但调试较困难。本文还展示了使用OpenCL实现图像均值滤波的C++代码示例,对比了CPU与GPU的执行效率。通过CMake构建项目,该技术可广泛应用于图像处理、机器学习等领域,特别适合需要跨平台部署的场景。
2025-06-12 17:32:45
717
原创 c++实现四元数球面线性插值
属性说明✅ 正确实现是,符合标准 SLERP 逻辑✅ 防止精度问题是,处理了点积接近 1 的情形✅ 单位四元数是,normalize 保证了归一性。
2025-06-04 20:00:58
195
原创 c++对imu的角速度积分得到表示旋转四元数
参数名类型含义四元数(当前姿态)当前时刻设备的姿态gyro陀螺仪三轴角速度,单位 rad/sdtdouble时间间隔(单位:秒)⏎ 返回值四元数新的姿态(经过角速度积分后)功能说明利用角速度gyro推进四元数(姿态)随时间dt的演化不使用外部传感器(如加速度)单纯基于陀螺仪积分返回单位四元数表示新时刻设备的旋转状态。
2025-06-04 17:52:50
467
原创 c++高精度快速测量某段代码的执行耗时
这段代码定义了两个用于的宏(INIT_TIMER和STOP_TIMER),通常用于性能分析或调试阶段,方便快速测量某段代码的执行耗时。
2025-06-04 17:26:18
236
1
原创 cv::FileStorage用法
功能优势读写结构化数据一行代码搞定 YAML、XML 或 JSON支持丰富数据类型向量、矩阵、图像、字典、数组易于配置与共享常用于校准参数存储、SLAM配置等C++ 集成度高直接读取 OpenCV 类型,无需格式转换。
2025-06-04 15:39:24
364
1
原创 if(!filter_radius_.empty()) 和 if(filter_radius_.size()>0) 哪个更好
/ ✅ 推荐写法if (!// 容器不为空这是更地道、更高效、更推荐的 STL 用法。
2025-05-27 09:58:40
133
原创 canny边缘检测算法(c++实现)
本文介绍了一个基于OpenCV库的自定义Canny边缘检测算法实现。代码首先通过高斯滤波对输入图像进行平滑处理,以减少噪声。接着,使用Sobel算子计算图像的梯度幅值和方向。然后,通过非极大值抑制算法细化边缘,保留局部最大梯度值。最后,采用双阈值处理和边缘连接技术,确定并连接强边缘,生成最终的边缘检测结果。整个算法封装在customCanny函数中,并通过主函数加载灰度图像并调用该函数进行边缘检测,最终显示原始图像和检测到的边缘。
2025-05-20 21:07:51
910
原创 harris角点检测
本文介绍了Harris角点检测算法的原理与实现。角点定义为滑窗沿任意方向移动时亮度变化显著的点。通过定义窗口能量函数,并对其进行二阶泰勒展开,推导出角点检测的关键公式。算法通过计算图像梯度矩阵的特征值,判断是否为角点。代码实现部分展示了如何使用Sobel算子计算图像梯度,并通过卷积操作计算Harris响应值。最后,通过设定阈值筛选出角点,并在图像上标记。代码还提供了图像读取、处理和保存的完整流程,使用stb_image库进行图像操作。
2025-05-19 21:32:52
382
原创 德劳内三角剖分原理
德劳内三角剖分是在一组平面点中生成三角形的方式,使得任意一个三角形的外接圆内部都不包含其他点。这个性质保证了构建的三角网格“最合理”、不瘦长,适合空间插值与地形建模。特性内容空圆性质三角形的外接圆内不包含其他点最优角度最大化三角形最小角度,避免瘦角对偶结构与 Voronoi 图互为对偶构建复杂度平面O(n log n),三维更复杂应用广泛地形建模、点云重建、图形学等如果你想:看代码实现(Python、C++等);使用工具库(如 CGAL、scipy、QGIS);
2025-05-16 11:54:35
525
原创 为什么在生成DSM前,要构建三角面片(Mesh)
原因解释🔄 连接离散点形成连续面,表达地表形状📍 便于插值知道三角面后可进行稳定、局部的线性插值🎯 保留结构避免破坏原有地形结构,如屋顶、边缘等🧠 空间表达清晰适合后续分析,如坡度、曲率、水流模拟等。
2025-05-16 11:45:56
443
原创 多线程里面 锁是怎么知道要保护哪个变量的
锁不是绑定到变量的,而是人为设计来保护变量访问的。需要你始终遵守约定:访问某变量时必须先持有对应的锁。最好的做法是封装锁和数据,防止不安全访问。
2025-05-08 11:36:52
799
原创 把本地的文件拷贝到wsl的文件夹下或者 wsl读取本地的文件
你可以非常方便地在 Windows 和 WSL(Windows Subsystem for Linux)之间。
2025-05-07 14:25:02
471
原创 ceres/gtest/gtest.h:10445:35: error: variable or field ‘it’ declared void10445 | for (typename C:
已思考 13 秒以下错误通常不是语法错误本身,而是 Ceres 自带的 GTest 与所用 Eigen、或编译选项之间的不兼容导致宏/模板解析失败,进而把it识别成void类型。
2025-05-07 11:13:40
1133
1
原创 CHECK(local_parameterization_ == NULL) << “Can‘t re-set the local parameterization; it lead
在 glog 中,if (!abort();// 强制终止程序而<<是重载的输出运算符,像std::cout一样,把信息组合在一起输出。语法含义CHECK(x)如果x为 false,就打印错误并终止追加错误信息(可多个)被检查的成员变量== NULL条件是“尚未设置”
2025-05-07 10:15:53
234
原创 不能返回一个函数的局部变量的引用或指针
返回方式是否安全注意事项按值返回✅最推荐方式,支持优化返回局部引用/指针❌会导致悬垂引用/未定义行为返回动态分配指针✅注意内存管理(建议用智能指针)通过参数返回✅函数不直接返回结果,易于控制返回 static 引用⚠️有状态、线程不安全,需小心使用。
2025-05-06 10:47:08
274
原创 failed to start gdm.service - gnome display manager
4. 运行startx。如果成功,您可以重新启动系统,并期望gdm能够正常工作。3. (可选)运行sudo apt-install--重新安装ubuntu桌面。1. 显示错误消息后,键入Ctrl+Alt+F2(不是原始答案中的F3)对我来说,这是在~/下载。5. 运行reboot将重新启动您的计算机。2. 提供用户/通行证并登录您的帐户。
2025-04-27 14:02:02
576
原创 解决ssh拉取服务器数据,要多次输入密码的问题
方法安全性推荐度特点SSH 免密登录✅✅✅⭐⭐⭐⭐⭐配置一次,终身受益sshpass❌⭐⭐快捷测试,不推荐长期使用。
2025-04-25 15:25:01
476
原创 区分指向常量的指针、常指针和指向常量的常指针
优先使用const修饰不应修改的参数(例如理解清晰你的目的:你是要锁住“指针”还是“指针指向的数据”?写代码时从右往左读更清楚可读为 “p是一个常量指针,指向一个常量 int”。如果你常用的话,养成“从右向左读指针声明”的习惯,真的非常有帮助!
2025-04-24 16:59:57
660
原创 可视化轨迹的朝向
evo_traj是一个很好的工具去可视化轨迹,但是这个只能显示轨迹顺着时间轴的连续性的样子,或者去计算轨迹的误差,但是没有办法显示轨迹的朝向,因此,为了可以方便的可视化轨迹的朝向,可以使用pangolin去可是话对应evo格式的轨迹。
2025-04-23 15:04:12
384
原创 unordered_set 和 unordered_map 和 map 和 set的区别
set如果你要...推荐容器存储一组唯一的、排序的值set存储一组唯一的、快速查找但不排序的值保存 key-value,按 key 排序遍历map保存 key-value,仅快速查找,不排序。
2025-04-23 09:20:49
535
原创 Multi-View Stereo for Community Photo Collections
但是,两个视图之间存在共有的特征不能保证好的稠密重建的结果,两个视图之间存在很多的匹配的时候,往往的重叠度很高,这个时候一般两张图之间基线很小,基线小计算的视差误差就会偏大。在SFM阶段计算的3D点(共有特征)是一个很好的指示,对于给定的视图R去找到与之相关的视图V,因为3D点源自于三角化,而三角化又来自于特征的匹配,那么如果两个视图存在匹配了,直接就说明两个视图之间存在重叠关系。如公式所示,对应的分辨率的比值在1-2之间时,得分是最高的1,也就是说两张图像的分辨率越相近,得分越高。在实验中设置为10度。
2025-04-22 19:21:19
370
原创 #define RFOREACH(var, arr) for (ARR2IDX(arr) var=(arr).size(); var-->0; )
这个宏的定义:是用来 反向遍历一个容器(比如 vector) 的,非常紧凑而且聪明的写法。假设你有一个容器,比如:然后你用:这个宏展开成:分析: 这个宏的作用通常是推导合适的索引类型,比如 ,常见定义可能是: 这样 会变成 (通常是 )。:从最后一个 index 的后面开始。:先判断 ,再执行 ,所以 最后一次迭代时 i==1,然后变成 0 就退出循环。所以实际遍历的 index 是:💡 从最后一个元素开始,按 index 倒着遍历整个容器。输出:
2025-04-22 09:16:04
414
1
原创 typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;
我们没有在 List.h 文件中找到 MVS_API 的定义。MVS_API 很可能在 MVS 库的其他地方定义。一般来说,MVS_API 是控制 OpenMVS 库导入导出的宏,通常会出现在 MVS 的头文件中。为了回答这个问题,我可以提供 MVS 代码中常见的定义方式,稍后会在代码中搜索 MVS_API。
2025-04-21 10:12:27
514
原创 using Hash_Map = std::map<Key, Value, std::less<Key>, Eigen::aligned_allocator<std::pair<const Key
部分含义有序映射容器(默认红黑树)升序排序(默认)防止 Eigen 类型内存对齐错误定义别名,方便多次使用。
2025-04-16 20:35:45
301
原创 c++常量成员函数
const放在成员函数后面是为了告诉编译器“这个函数不会修改对象内部状态”。这样做可以让你在const对象上调用它。是一种“承诺”,也是一种“限制”,可以帮助提高代码安全性和可读性。
2025-04-15 13:57:53
276
原创 有一个变量 在有些线程没有加锁 有些线程加锁了,那我在这些加锁的线程中能起到对应的作用吗
锁只有在所有访问者都遵守的情况下才有意义。有加锁和没加锁混用 = 数据竞争 =。最好制定清晰的访问协议:谁、什么时机、用什么锁访问。对简单原子变量,可考虑。
2025-04-08 15:06:07
233
原创 保存编译的日志
如上命令可以在build 的路径下 找到 log.txt的文件 里面有对应的编译的所有的日志,包含错误的日志,方便排查,不然打印在命令行,很容易被刷掉,看不到真实的问题。将标准错误(文件描述符 2)重定向到标准输出(文件描述符 1),从而合并两者的输出。tee 命令将从管道接收到的输入同时写入文件 log.txt 和打印到终端。如果使用 tee -a,输出会被追加到文件末尾,而不是覆盖文件内容。编译命令,使用 8 个并行任务。上面的命令不懂可以发给大模型,让它解释一下。
2025-04-01 09:51:07
197
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人