- 博客(73)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
原创 C++类的继承关系中什么时候要用到上行转换和下行转换
例如,在前面提到的`Animal`类及其派生类的例子中,如果我们有一个函数接收`Animal`类型的指针,并且我们知道这个指针实际上指向的是`Dog`对象,我们想要调用`Dog`类特有的函数(比如`Dog`类有一个`fetch`函数,`Animal`类没有),就需要将`Animal`指针下行转换为`Dog`指针。例如,在一个图形编辑系统中,我们将不同类型的图形对象(`Circle`、`Rectangle`等派生类)向上转换为`Shape`类型并存储在一个容器中。方便在已有的代码基础上添加新的派生类。
2024-12-21 16:59:21
462
原创 pcl均匀采样pcl::UniformSampling得到采样后的索引
【代码】pcl均匀采样pcl::UniformSampling得到采样后的索引。
2024-11-27 11:14:20
272
原创 PCL中的半径离群点去噪-RadiusOutlierRemoval
该滤波器会计算每个点周围一定半径内点的密度,并将密度低于一个阈值的点移除。template <typename PointT> voidpcl::RadiusOutlierRemoval<PointT>::applyFilterIndices (std::vector<int> &indices){ //首先检查search_radius_是否为0,如果是,则输出错误信息,并清空indices和removed_indices_,然后返回。 if
2023-11-16 11:24:09
381
原创 PCL中的统计学滤波离群点去噪-StatisticalOutlierRemoval
统计滤波器的主要思想是假设点云中所有的点与其最近的k个邻居点的平均距离满足高斯分布,那么,根据均值和方差可确定一个距离阈值,当某个点与其最近k个点的平均距离大于这个阈值时,判定该点为离群点并去除。统计滤波器的实现原理如下:首先,遍历点云,计算每个点与其最近的k个邻居点之间的平均距离;其次,计算所有平均距离的均值μ与标准差σ,则距离阈值dmax可表示为dmax=μ+α×σ,α是一个常数,可称为比例系数,它取决于邻居点的数目;最后,再次遍历点云,剔除与k个邻居点的平均距离大于dmax的点。
2023-11-14 18:01:18
870
原创 PCL中的FPS(最远点采样)源码
例如:继续选取点,分别计算剩余各点到P0,P1,P2的距离,并选取最短的那个距离作为某点到P1,P2,P3整体的距离,然后选取这些点中距离最大的那个点,记为P3。另一种规范的做法是:求整个数据点(点云)的重心(即所有点坐标求和平均得到的坐标点),选取距离重心最远的点,记为P0。4. 对于剩下的每个点,分别计算到P0和P1的距离,并选取最短的那个作为这个点到P0,P1整体的距离。计算这些距离后选择距离最大的那个点,记为P2。3. 然后,我们继续选取剩余的所有点中距离P0最远的点,记为P1。
2023-08-31 15:30:10
437
原创 PCL计算均值和协方差矩阵computeMeanAndCovarianceMatrix
如果点云是非稠密的,则将计算限制在具有有限值的点上,并更新点的数量。最后,累加器中的值除以点的数量,得到了各个坐标的平均值。其中,协方差矩阵是描述随机向量之间关系度量的矩阵,而中心点是点云的平均位置。该函数首先创建了一个大小为 9 的 Eigen::Matrix 对象 accu 作为累加器,并将其初始化为零矩阵。然后,对于点云中的每个点,该函数将点的 x、y、z 坐标及其平方项相应地添加到累加器中。此函数对于点云分析和计算对象的几何属性非常实用,例如计算点云的主要方向、法线和曲率等信息。
2023-06-13 15:03:10
891
原创 pcl中MomentOfInertiaEstimation计算有向包围盒
然后通过对二次型矩阵进行特征值分解,可以得到物体的惯性矩阵及其特征向量和特征值,从而计算出物体的三个主轴及其长度、长宽高、体积等信息。然后,将计算出的主轴、中轴和次轴组成旋转矩阵,并计算 OBB 盒的位置(即重心)和边界框大小。首先,通过遍历待计算的点云,计算每个点相对于主轴、中轴和次轴的投影,并更新 OBB 盒的最大、最小边界坐标。在点云处理中,矩特征分析是一个常用的工具,例如可以通过矩特征来计算物体的质心、面积、方向、形心、协方差矩阵等,从而实现物体分类、跟踪、位姿估计以及三维重建等应用。
2023-04-23 14:31:19
1459
2
原创 PCL高斯混合聚类
GMM 聚类算法通过假设数据集中的每个簇都服从一个高斯分布来建模数据,并使用最大似然估计(Maximum Likelihood Estimation,MLE)方法估计 GMM 的参数。E 步骤通过使用贝叶斯定理计算每个数据点属于每个簇的概率,即计算每个簇的后验概率。在这个过程中,需要计算当前估计的 GMM 参数对应下,每个数据点属于每个簇的概率。M 步骤根据 E 步骤计算得到的后验概率以及每个簇的先验概率,在最大化似然函数的意义下更新 GMM 的参数,包括每个簇的均值、协方差矩阵和先验概率。
2023-04-21 09:44:20
667
6
原创 openv将raw格式的图像转成jpg
在工业相机采集数据时,应该会出现raw格式的图像。#include <iostream>#include <io.h>#include <chrono>int main(){ std::string filePath = "I:/bf/cn1"; std::vector<std::string> allFiles; getFiles(filePath, allFiles); auto aa = std::chrono::system_
2022-04-27 17:55:39
1163
翻译 C++ 并行加速
1.OpenMP并行加速: 在MIMD作为主要研究对象的系统中,分为两种类型:共享内存系统和分布式内存系统,之前我们介绍的基于MPI方式的并行计算编程是属于分布式内存系统的方式,现在我们研究一种基于OpenMP的共享内存系统的并行编程方法。VS配置进行OpenMP开发的步骤:(1)在正式进行OpenMP编码之前,需要对编译器稍微配置一下。启动VS2015新建一个C++的控制台应用程序;(2)然后在项目解决方案资源管理器上选择项目名称,点击右键,选择“属性”;(3)然后在属性页...
2022-04-16 09:32:13
2255
原创 CMake学习
1.CMake变量的使用2.变量的定义和引用使用 ${} 进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过 ${} 取值; 环境变量: 使用 $ENV{NAME} 指令就可以调用系统的环境变量了; 设置环境变量的方式是:SET(ENV{变量名} 值)。 ...
2022-03-12 09:29:22
890
原创 Opencv照片合成视频
void getFiles(const string& rootPath, vector<string> &paths, vector<string> &filePaths){ namespace fs = boost::filesystem; fs::path fullpath(rootPath); fs::recursive_directory_iterator end_iter; for (fs::recursive_directory_...
2022-02-28 15:46:16
2232
原创 GIS基础知识记录
一、坐标系代码1.1 EPSG:4326 (WGS84)前面说了 WGS84 是目前最流行的地理坐标系统。在国际上,每个坐标系统都会被分配一个EPSG代码,EPSG:4326 就是 WGS84 的代码。GPS是基于WGS84的,所以通常我们得到的坐标数据都是WGS84的。一般我们在存储数据时,仍然按WGS84存储。原点:地球质心。 Z轴:BIH(1984.0)定义的地极(CTP)方向,即国际协议原点CIO,它由IAU和IUGG共同推荐。 X轴:指向BIH定义的零度(本初)...
2021-11-13 14:25:09
3418
原创 Unix时间转周秒时间
double preTime = dUnix_time / 1000000;int nTime = floor(preTime);double dTime = preTime - nTime; //得到毫秒QDateTime datetime = QDateTime::fromTime_t(nTime);//或者使用QDateTime::fromTime_t(nTime).toUTC()转换为UTC的时间QDate date = datetime.date();int dayofweek .
2021-11-13 10:04:05
1036
原创 应用程序无法启动,因为应用程序的并行配置不正确
在软件安装的过程中会出现如下的问题:我们,可以右键此电脑-管理,打开计算机管理器,查看日志,可以看到软件运行缺少的环境。
2021-09-07 15:41:23
4912
1
原创 VS调试时不显示变量的值
(1)不显示Qt中类型的值,如下图所示:原因:没有安装VS的Qt插件:qt-vsaddin。(2)不显示C++中的变量,如下图所示:在工具-选项-调试-常规中取消在变量窗口中显示对象的原始结构前面的√...
2021-08-12 17:39:56
14752
2
翻译 点云E57格式
E57格式是由ASTM制定的3D图像数据文件格式标准,它是一种交换数据的格式,它汇集了点云和图像,使二者相连接。它可以储存(1)3D点数据;(2)属性,比如:色彩或亮度;(3)影像,如:数字化图片。E57的文件格式设计:...
2021-08-08 16:49:29
4228
1
原创 Qt翻译中lconvert.exe的使用
(1)当我们的ts文件损坏或者丢失时,可以根据qm文件反生成ts文件,使用如下的命令:lconvert compiled.qm -o source.ts (2)将多个ts文件合并输出lconvert -i primary.ts secondary.ts -o complete.ts
2021-04-23 21:31:55
1184
原创 opencv读取视频文件解析为照片
缺少处理视频文件需要的dll,把opencv文件夹中的 \3rdparty\ffmpeg里的opecv_ffmpeg.dll文件复制到bin目录下。
2020-12-16 17:48:38
665
原创 PDAL中filters.divider过滤器对大点云文件进行分割
//pdal库将las文件分割为多个文件void dividerLAS(){ using namespace pdal; using namespace pdal::Dimension; std::string in_filename = "F:\\pointCloud_data\\zhangjiang8\\pointcloud\\181013_030701-11-16-47-028.las";//中文路径可能报错 std::string fileName = "d:/out_#.la...
2020-11-19 14:34:29
670
原创 PDAL库读写多种格式的点云
// PDALTest.cpp : 定义控制台应用程序的入口点。//#pragma execution_character_set("utf-8") //解决中文#include "stdafx.h"#include <iostream>#include <memory>#include <pdal/PointTable.hpp>#include <pdal/PointView.hpp>#include <pdal/Opt...
2020-11-18 18:04:19
2926
1
原创 VS如何新建RelWithDebInfo模式
从这个模式的名称来看,它是一种含有调试信息的Release版本。那么它相当于是结合了Debug和Release版本的优点的一个版本。在C/C++的优化中【禁用优化】
2020-11-12 15:40:21
1486
原创 视觉SLAM十四讲(二)Eigen库
Eigen库是一个C++的开源线性代数库。它是一个纯头文件搭建起来的库,不需要链接库文件。Eigen库中所有的向量和矩阵都是Eigen::Matrix,它是一个模板类,它的前三个参数为数据类型、行、列。如果不确定矩阵的大小,可以使用动态大小的矩阵:Matrix<double,Dynamic,Dynamic> matrix_dynamic;随机数矩阵:Matrix3d::Random();转置:matrix_33.transpose();各元素之和:matrix_33.sum(
2020-10-01 10:56:17
1386
原创 视觉SLAM十四讲(一)基础知识
SLAM是Simultaneous Localization and Mapping的缩写,中文“同时定位于地图构建”。双目SLAM的距离估计是比较左右眼的图像获得的,非常消耗计算资源,需要使用GPU和FPGA设备加速。所以计算量是双目的主要问题之一。基线:两个相机之间的距离,基线越大,能够测量到的物体越远。回环检测:又称闭环检测,主要解决位置估计随时间漂移的问题,需要让机器人具有识别到过的场景的能力。刚体运动:两个坐标系之间的运动由一个旋转加上一个平移组成。比如相机的运动,同一个向量在各个坐标
2020-10-01 09:56:52
2724
1
原创 CloudCompare分离点云地面点和非地面点
在点云的处理中,需要分离地面点和非地面点。使用CloudCompare可以完成。先加载一份点云数据,点击插件中的CSF Filter功能,弹出如下图所示的对话框:其中,“Steep slope”是陡坡;“Relief”是缓坡;“Flat”是平地,根据自己的点云情况选择对应的参数。点击ok。最后得到的地面点云如下图所示:...
2020-07-27 19:13:12
11323
4
原创 LASlib库将PCL库点云类型数据转换为las格式保存
pcl是一个命名空间,跟std类似,PointCloud是类模板,<pcl::PointXYZ>是模板类实例化的类型。 在使用pcl::PointCloud<pcl::PointXYZI>::Ptr时需要使用new进行初始化,如下:pcl::PointCloud<pcl::PointXYZI>::Ptr cloudxyzi(new pcl::PointCloud<pcl::PointXYZI>); 在使用...
2020-06-16 21:02:38
4115
3
原创 使用GDAL库读写SHP文件
本文介绍如何读写shp文件的矢量线。在项目中,我们经常需要提取一些道路标线等对象保存为shp文件。本文使用到了Eigen库,需要的同学自己下载使用。以下读取shp文件的函数暂不支持中文路径。(1)读取矢量线shp文件:bool readPolylineShp(const std::string &filename, std::vector<std::vector<Eigen::Vector3f>> &pts) { // if this...
2020-05-13 13:57:19
8135
原创 Boost库实现文件夹下所有pcd文件名称的提取
下面的代码使用Boost库实现文件夹下所有pcd文件名称的提取,首先创建两个向量pcd_files_和pcd_paths用于存储文件夹下的点云序列和路径的序列。 boost::filesystem::is_directory:用于判断传入的参数dir_是否为目录。 boost::filesystem::directory_iterator:结合for循...
2020-05-07 12:49:25
433
原创 使用LASlib(LASTool)库对LAS文件进行分割
在实际的项目,有很多时候,我们会遇到一个巨大的las文件,比如7,8个G的大小。这时候,我们需要对这个大的las文件进行分块保存为多个小的las文件。可是按照点的个数进行保存,也可以按照内存的大小保存。实际上也就是对点云的读写过程。具体的代码如下所示:void lasFileDivision(){ LASreadOpener lasreadopener; LASwrite...
2020-04-22 22:05:00
3350
1
原创 VS2017+win10编译LASlib(LASTools)库
LASlib是进行点云数据读写的理想工具,由北卡计算机学院的Martine isenburg编写。基于该开源库,作者同时开发了LASTool,包含了一系列点云数据处理的工具。LASlib提供了LAS格式的LiDAR点云数据的高效读写接口。因此,对于一些常用的LAS格式的数据操作,LASlib的开源、高效等特性,无疑使其成为一个重要的开发库。源代码下载地址:http://www.c...
2020-04-14 09:55:46
3588
4
原创 libLAS库实现las文件的读写
尽管libLAS库已经没有维护了。但是还是有些同学在以前的项目中需要用到libLAS库。下面就简单的用代码展示如何使用libLAS库来读写las点云数据。(1)读las文件点云数据(这个比较简单,网上有大量的例子):std::ifstream ifs;ifs.open("C:\\Users\\51267\\Desktop\\podtest\\181013_030701-1...
2020-04-13 11:40:11
4501
1
原创 点云库PCL从入门到精通常见的编译错误
(1)error c4996: 'fopen': This function or variable may be unsafe 解决方法:项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加:_CRT_SECURE_NO_DEPRECATE。 参考博文:https://blog.youkuaiyun.com/wang...
2020-04-07 12:04:09
5179
2
LASlib(LASTools)读写las文件.txt
2020-04-14
通过在Qt中调用cmd命令来执行sql数据库备份
2019-02-27
C++实现贝叶斯分类器(包含测试数据)
2018-08-03
DirectShow实现视频的实时显示并抓图,可以设置视频参数
2018-05-26
modbus协议中文版
2018-05-23
C#char图表-从SQLite中读取数据显示在dataGridView报表中并用char图表饼状图,柱状图,折线图等显示出来
2018-05-23
WIN10下如何使用Qt调用系统键盘OSK.exe
2019-09-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人