- 博客(51)
- 收藏
- 关注
原创 canny边缘检测算法(c++实现)
本文介绍了一个基于OpenCV库的自定义Canny边缘检测算法实现。代码首先通过高斯滤波对输入图像进行平滑处理,以减少噪声。接着,使用Sobel算子计算图像的梯度幅值和方向。然后,通过非极大值抑制算法细化边缘,保留局部最大梯度值。最后,采用双阈值处理和边缘连接技术,确定并连接强边缘,生成最终的边缘检测结果。整个算法封装在customCanny函数中,并通过主函数加载灰度图像并调用该函数进行边缘检测,最终显示原始图像和检测到的边缘。
2025-05-20 21:07:51
653
原创 harris角点检测
本文介绍了Harris角点检测算法的原理与实现。角点定义为滑窗沿任意方向移动时亮度变化显著的点。通过定义窗口能量函数,并对其进行二阶泰勒展开,推导出角点检测的关键公式。算法通过计算图像梯度矩阵的特征值,判断是否为角点。代码实现部分展示了如何使用Sobel算子计算图像梯度,并通过卷积操作计算Harris响应值。最后,通过设定阈值筛选出角点,并在图像上标记。代码还提供了图像读取、处理和保存的完整流程,使用stb_image库进行图像操作。
2025-05-19 21:32:52
248
原创 德劳内三角剖分原理
德劳内三角剖分是在一组平面点中生成三角形的方式,使得任意一个三角形的外接圆内部都不包含其他点。这个性质保证了构建的三角网格“最合理”、不瘦长,适合空间插值与地形建模。特性内容空圆性质三角形的外接圆内不包含其他点最优角度最大化三角形最小角度,避免瘦角对偶结构与 Voronoi 图互为对偶构建复杂度平面O(n log n),三维更复杂应用广泛地形建模、点云重建、图形学等如果你想:看代码实现(Python、C++等);使用工具库(如 CGAL、scipy、QGIS);
2025-05-16 11:54:35
453
原创 为什么在生成DSM前,要构建三角面片(Mesh)
原因解释🔄 连接离散点形成连续面,表达地表形状📍 便于插值知道三角面后可进行稳定、局部的线性插值🎯 保留结构避免破坏原有地形结构,如屋顶、边缘等🧠 空间表达清晰适合后续分析,如坡度、曲率、水流模拟等。
2025-05-16 11:45:56
431
原创 多线程里面 锁是怎么知道要保护哪个变量的
锁不是绑定到变量的,而是人为设计来保护变量访问的。需要你始终遵守约定:访问某变量时必须先持有对应的锁。最好的做法是封装锁和数据,防止不安全访问。
2025-05-08 11:36:52
791
原创 把本地的文件拷贝到wsl的文件夹下或者 wsl读取本地的文件
你可以非常方便地在 Windows 和 WSL(Windows Subsystem for Linux)之间。
2025-05-07 14:25:02
238
原创 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
1100
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
226
原创 不能返回一个函数的局部变量的引用或指针
返回方式是否安全注意事项按值返回✅最推荐方式,支持优化返回局部引用/指针❌会导致悬垂引用/未定义行为返回动态分配指针✅注意内存管理(建议用智能指针)通过参数返回✅函数不直接返回结果,易于控制返回 static 引用⚠️有状态、线程不安全,需小心使用。
2025-05-06 10:47:08
263
原创 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
356
原创 解决ssh拉取服务器数据,要多次输入密码的问题
方法安全性推荐度特点SSH 免密登录✅✅✅⭐⭐⭐⭐⭐配置一次,终身受益sshpass❌⭐⭐快捷测试,不推荐长期使用。
2025-04-25 15:25:01
437
原创 区分指向常量的指针、常指针和指向常量的常指针
优先使用const修饰不应修改的参数(例如理解清晰你的目的:你是要锁住“指针”还是“指针指向的数据”?写代码时从右往左读更清楚可读为 “p是一个常量指针,指向一个常量 int”。如果你常用的话,养成“从右向左读指针声明”的习惯,真的非常有帮助!
2025-04-24 16:59:57
650
原创 可视化轨迹的朝向
evo_traj是一个很好的工具去可视化轨迹,但是这个只能显示轨迹顺着时间轴的连续性的样子,或者去计算轨迹的误差,但是没有办法显示轨迹的朝向,因此,为了可以方便的可视化轨迹的朝向,可以使用pangolin去可是话对应evo格式的轨迹。
2025-04-23 15:04:12
374
原创 unordered_set 和 unordered_map 和 map 和 set的区别
set如果你要...推荐容器存储一组唯一的、排序的值set存储一组唯一的、快速查找但不排序的值保存 key-value,按 key 排序遍历map保存 key-value,仅快速查找,不排序。
2025-04-23 09:20:49
516
原创 Multi-View Stereo for Community Photo Collections
但是,两个视图之间存在共有的特征不能保证好的稠密重建的结果,两个视图之间存在很多的匹配的时候,往往的重叠度很高,这个时候一般两张图之间基线很小,基线小计算的视差误差就会偏大。在SFM阶段计算的3D点(共有特征)是一个很好的指示,对于给定的视图R去找到与之相关的视图V,因为3D点源自于三角化,而三角化又来自于特征的匹配,那么如果两个视图存在匹配了,直接就说明两个视图之间存在重叠关系。如公式所示,对应的分辨率的比值在1-2之间时,得分是最高的1,也就是说两张图像的分辨率越相近,得分越高。在实验中设置为10度。
2025-04-22 19:21:19
359
原创 #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
411
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
505
原创 using Hash_Map = std::map<Key, Value, std::less<Key>, Eigen::aligned_allocator<std::pair<const Key
部分含义有序映射容器(默认红黑树)升序排序(默认)防止 Eigen 类型内存对齐错误定义别名,方便多次使用。
2025-04-16 20:35:45
298
原创 c++常量成员函数
const放在成员函数后面是为了告诉编译器“这个函数不会修改对象内部状态”。这样做可以让你在const对象上调用它。是一种“承诺”,也是一种“限制”,可以帮助提高代码安全性和可读性。
2025-04-15 13:57:53
269
原创 有一个变量 在有些线程没有加锁 有些线程加锁了,那我在这些加锁的线程中能起到对应的作用吗
锁只有在所有访问者都遵守的情况下才有意义。有加锁和没加锁混用 = 数据竞争 =。最好制定清晰的访问协议:谁、什么时机、用什么锁访问。对简单原子变量,可考虑。
2025-04-08 15:06:07
222
原创 保存编译的日志
如上命令可以在build 的路径下 找到 log.txt的文件 里面有对应的编译的所有的日志,包含错误的日志,方便排查,不然打印在命令行,很容易被刷掉,看不到真实的问题。将标准错误(文件描述符 2)重定向到标准输出(文件描述符 1),从而合并两者的输出。tee 命令将从管道接收到的输入同时写入文件 log.txt 和打印到终端。如果使用 tee -a,输出会被追加到文件末尾,而不是覆盖文件内容。编译命令,使用 8 个并行任务。上面的命令不懂可以发给大模型,让它解释一下。
2025-04-01 09:51:07
186
原创 ubuntu安装glomap
4. 对应ceres版本要求用新的eigen 3.4.0编译的,不能用之前的老的eigen编译的ceres. 注意直接安装ceres 1.14.0的话 会有较多的编译问题,我懒得解决这些bug, 直接安装了 ceres 2.0.0。1. 首先本地安装好colmap。5. 编译glomap。6. 打开glomap。
2024-08-02 17:06:53
777
1
原创 使用vscode的debug功能
3. 这个时候 只需要修改task的 -I 参数,填写为对应的Eigen的安装路径即可,如下所示。2. 有了代码之后,直接点击vscode的run 或者debug的话 一般会报错。1. 代码如下所示,需要包含Eigen的库,安装的话有很多教程,直接照着来就可以。4. 处理之后,可以编译通过,并且得到对应的输出,还可以进行debug。
2024-07-17 16:40:18
730
原创 nvidia-container-runtime“: executable file not found in $path: unknown
【代码】nvidia-container-runtime“: executable file not found in $path: unknown。
2024-06-21 10:58:02
832
原创 nvidia/cublas/lib/libcublas.so.11: undefined symbol: cublasLtHSHMatmulAlgoInit, version libcublasLt.
以上报错极大的概率是 pytorch 版本和 本地cuda 版本不兼容。可以从如下网址 找一个适配的pytorch 即可。
2024-04-12 09:29:51
571
1
原创 open3D点云配准ICP
在查找相关点的时候,如果两个点匹配的距离比threshold小的话,那么这对关联是找不到的,所以这个参数还是很重要的,不然ICP容易失败。点云配准算法ICP中一个很重要的参数是 threshold。所以不是说 threshold越小越好。
2024-04-03 10:08:43
677
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人