
C++开源库
文章平均质量分 75
介绍C++的一些常用开源库,例如Eigen, PCL, openCV等的使用
瞻邈
老菜鸟一个。
展开
-
Eigen::Map
Eigen库是一个非常常用的线性代数库。Eigen库中的Map类是一个非常有用却又很容易被忽略的类,它不同于C++ STL中的map。Eigen::Map 是一个非常有用的类模板,它的,而无需进行数据的复制操作。这种方式使得你可以直接操作已有的数据,避免了额外的内存开销和数据复制带来的性能损耗。映射后的eigen数据类型如常见的Eigen::VectorXd,Eigen::MatrixXd等等MapOptions指针所指对象的内存对齐方式,默认值为 AlignedStrideType。转载 2025-04-27 12:36:47 · 57 阅读 · 0 评论 -
pcl::PointCloud各种添加点云方法的速度对比
pcl::PointCloud官方提供了一个添加点云的函数接口push_back(),但是实际中经常看到有人先调用resize()函数,再逐个进行赋值,理由是这样更快。本文对两种方法的速度进行对比。原创 2024-06-01 00:08:17 · 601 阅读 · 0 评论 -
Ceres计算Bundle Adjustment
给定一组测量图像的特征和对应关系,Bundle Adjustment的目标是找到使重投影误差最小的3D点位置和相机参数。这个优化问题通常被描述为非线性最小二乘法问题,要最小化的目标函数即为测得图像中特征点位置和相机成像平面上的对应的投影之间的差的平方。Ceres例程使用了BAL数据集。观测值:像点坐标优化量(平差量):pose 和landmark。原创 2024-05-22 17:25:20 · 1565 阅读 · 0 评论 -
Ubuntu18.04安装OpenCV和OpenCV_Contrib
删除opencv其他的相关文件参考提示:前四行命令中的OpenCV2,有些有可能自己命名了OpenCV4,在相关目录下删除掉跟opencv相关的文件夹就可以。原创 2024-05-13 09:20:53 · 3880 阅读 · 0 评论 -
OpenCV图片转视频
每个帧由像素组成,像素是图像中最小的单元,可以包含颜色和亮度信息。视频分辨率是指视频中每个帧的像素数量,通常用水平像素数和垂直像素数表示。例如,分辨率为1920x1080的视频表示每帧有1920个水平像素和1080个垂直像素。分辨率取决于采集和播放设备。摄像设备的分辨率:摄像设备的分辨率决定了视频中每个帧的像素数量。高分辨率的摄像设备可以捕捉更多的像素,从而产生更高分辨率的视频。播放设备的分辨率:播放设备的分辨率决定了视频的最终分辨率。原创 2024-05-06 09:31:52 · 1050 阅读 · 0 评论 -
OpenCV特征检测
1.特征检测的基本概念特征检测是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征检测的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。特征检测是指从图像或视频中自动检测出一些具有特定几何形状或特定的灰度分布等特征的局部区域。也就是说,图像特征是指有意义的图像区域,具有独特性,易于识别性,比较角点,斑点以及高密度区域。在图像特征中最重要的就是角点。原创 2024-05-04 14:30:06 · 981 阅读 · 0 评论 -
OpenMP并行开发 (C++)
OpenMP(开放式多处理)是一种应用程序编程接口(API),支持C,C ++和Fortran中的多平台共享内存 多 处 理 ( C P U ) {\color{blue}多处理(CPU)} 多处理(CPU)编程,适用于大多数平台,指令集架构和操作系统,包括Solaris,AIX,HP-UX,Linux,macOS和Windows。它由一组编译器指令,库例程和影响运行时行为的环境变量。共享内存并行编程模式。原创 2023-07-28 20:31:14 · 1209 阅读 · 0 评论 -
C++第三方开发库matplotlib-cpp
Matplotlib-cpp是一个用于在C++中绘制图表的开源库。它提供了与Python的Matplotlib库类似的功能,使得在C++环境下进行数据可视化变得更加便捷。基于Matplotlib-cpp,我们可以使用各种绘图函数和样式选项来创建各种类型的图表,包括折线图、散点图、柱状图等。它与C++的语法和数据结构紧密结合,方便了在C++项目中进行图表绘制和数据分析。原创 2023-07-25 13:19:41 · 9433 阅读 · 3 评论 -
PCL库特征提取
(Point Cloud Library)是用于处理2D/3D 图像以及点云的一个大型开源项目。学习PCL最好的途径是阅读其官网文档(虽然PCL的网站文档稍微有点“丑”,但是其内容十分详尽。从应用的角度而言,PCL可以用于点云的分割、分类、校准以及可视化等方面。从理论角度而言,PCL中包含的众多算法能更好得帮助人们理解与创造新的点云算法。无论是工业应用还是科研攻关,PCL都能在三维数据处理领域祝您一臂之力。激光雷达作为自动驾驶最常用的传感器,经常需要使用激光雷达来做建图、定位和感知等任务。原创 2022-11-19 10:39:25 · 2782 阅读 · 0 评论 -
cnpy库:C++读取npy/npz文件
NumPy提供了接口函数可以把数据存入.npy文件,也可把多个数组存入.npzy文件。cnpy库提供了在C++中读写这些格式的接口函数其动机来自于科学编程,其中大量数据是用 C++ 生成并用 Python 分析的。写入 .npy 的优点是使用低级 C++ I/O(fread 和 fwrite)来提高速度并使用二进制格式来提高大小。.npy 文件头负责指定数组的大小、形状和数据类型,因此无需指定数据的格式。原创 2022-11-13 22:20:56 · 4045 阅读 · 1 评论 -
NumCpp安装与使用
NumCpp中的主要数据结构是NdArray。它本质上是一个 2D 数组类,一维数组实现为1xN数组。还有一个DataCube类作为便利容器提供,用于存储2D数组NdArray,但它通过简单容器的用途有限。原创 2022-09-14 09:47:37 · 2774 阅读 · 0 评论 -
Ubuntu安装boost
Boost 库是一个经过千锤百炼、可移植、提供源代码的 C++ 库,作为标准库的后备,是 C++ 标准化进程的发动机之一。 Boost 库由 C++ 标准委员会库工作组成员发起,在 C++ 社区中影响甚大,其成员已近 2000 人。Boost 库为我们带来了最新、最酷、最实用的技术,是不折不扣的 “准” 标准库。原创 2022-09-13 19:07:18 · 2856 阅读 · 0 评论 -
Sophus库使用笔记
Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,还包括解方程等功能。但是Eigen库提供了集合模块,但没有提供李代数的支持。一个较好的李群和李代数的库是Sophus库,它很好的支持了SO(3),so(3),SE(3)和se(3)。Sophus库是基于Eigen基础上开发的,继承了Eigen库中的定义的各个类。因此在使用Eigen库中的类时,既可以使用Eigen命名空间,也可以使用Sophus命名空间............原创 2022-08-17 10:38:12 · 2512 阅读 · 0 评论 -
OpenCV中Mat的type类型介绍
在OpenCV中,数据类型可以使用int值来代替。常量类型的命名规则为:CV_(位数)+(数据类型)+(通道数)。其与int值的对应关系为:原创 2022-08-12 20:51:34 · 4726 阅读 · 0 评论 -
json-cpp使用笔记
Json-cpp是一个跨平台的轻量级的读取Json文件的C++开源库。原创 2022-07-14 16:43:29 · 1948 阅读 · 0 评论 -
Eigen稀疏矩阵操作
在许多应用中(例如,有限元方法),通常处理非常大的矩阵,其中只有少数系数不为零。在这种情况下,可以通过使用仅存储非零系数的专用表示来减少内存消耗并提高性能。这样的矩阵称为。原创 2022-06-26 17:59:36 · 1647 阅读 · 0 评论 -
OpenCV 4图像的读取、显示与存储
1. OpenCV4头文件介绍想要使用OpenCV的类与函数,需要引用相关头文件,头文件中定义了所需的类与函数。在OpenCV3.0版本之后,只须引用一个头文件即可使用OpenCV里所有的函数与功能。opencv.hpp头文件包含了OpenCV中所有模块的头文件。#include "opencv.hpp"如下图所示,是OpenCV4中主要的头文件:2. 读取图像imread()用来读取图片,其定义如下:Mat cv::imread(const String & fi转载 2022-02-03 17:39:03 · 2441 阅读 · 0 评论 -
常用C/C++开源库
1. 框架Apache C++ Standard Library : 是一系列算法,容器,迭代器和其他基本组件的集合 ASL : Adobe源代码库提供了同行的评审和可移植的C++源代码库。 Boost : 大量通用C++库的集合。 BDE : 来自于彭博资讯实验室的开发环境。 Cinder : 提供专业品质创造性编码的开源开发社区。 Bxxomfort : 轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。 Dlib : 使用契约式编程 EASTL : EA-ST转载 2021-12-02 15:32:10 · 4056 阅读 · 0 评论 -
GTest使用笔记
这是一个与JUnit类似的框架,这个框架很陈旧了,并且有着一些缺点,例如一些类可以消失,一些类名应该修改,一些宏定义应该修改,帮助很少很乱等。原创 2021-11-07 15:21:21 · 2460 阅读 · 0 评论 -
PCL点云读写,转换与显示
本文聚焦于 PCL(Point Cloud Library)中点云的读写、转换与显示操作。详细介绍了如何使用 PCL 库实现点云数据的有效读取与写入,深入讲解了不同格式点云之间的转换方法,以及如何通过相关函数和工具实现点云的直观显示。为从事点云处理相关工作的读者提供全面且实用的技术指导。原创 2021-08-23 10:28:40 · 1435 阅读 · 0 评论 -
Eigen矩阵运算的混淆问题
本文中,我们将深入探讨Eigen库在矩阵运算中常遇到的混淆问题,并对其进行详细解析与澄清。Eigen作为一个广泛使用的C++模板库,为线性代数、矩阵和向量运算提供了高效且灵活的支持。然而,由于其复杂的模板机制和多变的接口设计,开发者在使用Eigen时可能会遇到一些困惑和误解。本文将通过实例和解释,帮助读者理解并解决这些混淆问题,包括矩阵与向量的初始化、运算符号的重载、动态与静态矩阵的选择等。通过本文的学习,读者将能够更加熟练地运用Eigen库,避免常见的错误,并提升矩阵运算的效率和准确性。原创 2021-08-20 10:24:18 · 889 阅读 · 0 评论 -
C++视频库ffmpeg
我们常说的视频文件(例如 avi 文件,MP4 文件等)本质上是一种“容器”,其内部存放一帧帧的视频信息和音频信息。因此,视频文件内部常常包含不止一个“信息流”,而是包含一组“信息流”(若干视频流和若干音频流)。 所谓的“信息流”,其实就是随时间分布的信息而已。比如视频可以看成是一组随时间分布的“图片”。视频流中的一个数据元通常被称作“一帧(frame)”,每一种视频流都有属于自己的编解码器(enCOder/DECoder,在FFmpeg中被简写为 codec),用于说明该种视频流是如何编码和原创 2021-07-16 00:27:33 · 6232 阅读 · 0 评论 -
Eigen::Matrix使用笔记
include // 基本函数只需要包含这个头文件// 固定了行数和列数的矩阵和Matrix3d一致.// 固定行数.// 和MatrixXd一致.// 按行存储;默认按列存储.// 3x3 float 矩阵.// 3x1 float 列向量.// 1x3 float 行向量.VectorXd v;// 动态长度double型列向量x.size() // length(x) // 向量长度C.rows() // size(C,1) // 矩阵行数。原创 2021-07-11 16:48:17 · 7575 阅读 · 1 评论 -
nlohmann/json使用笔记
nlohmann/json 是一个用于解析json的开源c++库,口碑一流,号称有业界最好的性能,并且使用非常方便直观,是很多c++程序员的首选。开源官网处有详细说明用法,但篇幅过长,不便于迅速阅读抓重点。而且,所举例的某些用法实践上其实比较少用到,而某些实践上常用到的一些用法,官网却缺例子。所以自己简要总结了一下它的主要用法,并加上自己写的示例,希望能给到新接触该库的朋友一些帮助。#include "nlohmann/json.hpp"输入输出解析json j;std::ifstre原创 2021-05-07 13:59:22 · 2903 阅读 · 0 评论 -
ProtoBuf使用笔记
Protobuf(Protocol Buffers)是由Google开发的一种语言无关的数据序列化格式。它旨在将结构化数据(如结构化消息或文档)高效地序列化为紧凑的二进制表示,以便在网络上轻松传输或存储在磁盘上。原创 2021-03-24 19:34:32 · 513 阅读 · 1 评论 -
yaml-cpp介绍
YAML是专门用来写配置文件的语言,非常简洁和强大,比 JSON和xml格式要方便很多。YAML语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。它的基本语法规则如下YAML支持的数据结构有三种。原创 2021-02-19 17:48:52 · 16285 阅读 · 7 评论 -
Google Gflags使用
Google Gflags可以用于参数传递,它是以全局变量的形式进行参数传递,即代码中任何一处都可以调用到它。同时它也提供规范化的参数解析,可以用于主函数的传参。原创 2020-12-24 21:19:42 · 531 阅读 · 1 评论 -
OpenCV位姿与投影变换
符号^是向量到反对称的转换符。反之,我们也可以计算从一个旋转矩阵到旋转向量的转换。转轴 n 是矩阵 R 特征值 1 对应的特征向量。求解此方程,再归一化,就得到了旋转轴。关于转轴n,由于旋转轴上的向量在旋转后不发生改变,说明。不要像下面这样调用,输出的点不正确。原创 2020-12-24 20:30:11 · 1549 阅读 · 1 评论 -
Google Glog使用
Glog是Google的一个C++开源日志系统,轻巧灵活,入门简单,而且功能也比较完善。原创 2020-12-23 13:55:40 · 2106 阅读 · 0 评论 -
Eigen使用问题汇总
本文主要记录了我在使用Eigen库过程中的心得体会和关键知识点。Eigen是一款广泛应用于线性代数计算的C++模板库,其高效的性能和简洁的接口使得它成为科学计算和工程应用中的优选工具。在博客中,我详细介绍了Eigen库的基本使用方法,包括矩阵和向量的声明、运算以及常见操作。同时,我还分享了在实践过程中遇到的一些问题和解决方案,例如内存管理、性能优化以及与其他库的集成等。原创 2020-12-22 12:03:34 · 3878 阅读 · 0 评论 -
Eigen位姿表示
Eigen是一个非常强大的矩阵阵,有各种方式表示矩阵和进行矩阵操作。位姿也是一种矩阵,Eigen中有很多方法来描述位姿,本文进行介绍。原创 2020-12-21 19:24:58 · 2302 阅读 · 0 评论 -
OpenCV读写YAML/XML文件
本篇博客将深入探讨如何使用OpenCV库批量读写YAML和XML文件,这对于处理大规模数据集、配置参数保存与加载以及跨平台数据交换等场景具有极高的实用价值。博客首先概述了OpenCV库在图像处理领域的广泛应用,并强调了文件批量处理的重要性。接着,详细介绍了如何使用OpenCV的FileStorage类进行YAML和XML文件的读写操作,包括文件创建、数据写入、读取解析等关键步骤。此外,博客还提供了多个实例代码,展示了如何在实际项目中应用这些技术,解决具体的数据处理问题。原创 2020-12-21 18:21:00 · 1062 阅读 · 1 评论 -
Proj4学习笔记
地理坐标又称工程坐标使用平面来近似地球的球面,在地表选取一个点,沿着这个点做地球的切平面。原创 2020-12-21 18:12:02 · 1133 阅读 · 1 评论 -
Boost filesystem
/ 返回完整路径(相对路径 + 当前路径)// 目录是否存在// 是否是路径// 文件夹是否为空,必须保证路径存在,否则抛异常// 是否是普通文件// 是否是一个链接文件// 返回路径名对应的状态。原创 2020-12-21 17:59:08 · 3803 阅读 · 1 评论 -
OpenCV使用问题汇总
有时调用opencv的函数会遇到这样的报错:文档中明明写着参数类型是String,但传给string类型即编译不过,这是因为opencv默认支持的类型是cv::String, 而我们传入的类型一般是std::string,如果不写命名空间则只差首字母大小写,较难区分。.........原创 2020-12-18 16:16:20 · 731 阅读 · 2 评论 -
OpenCV画图/添加文字/图像拼接
circle(Mat img, Point center, int radius, Scalar color, int thickness=1, int lineType=8, int shift=0)函数的各个参数功能: img为源图像 center为画圆的圆心坐标 radius为圆的半径 color为设定圆的颜色,规则根据B(蓝)G(绿)R(红)(详解可参见上节矩形绘画) thickness 如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被.原创 2020-11-24 16:47:21 · 525 阅读 · 0 评论 -
cv::Mat使用笔记
本文中,我将深入探索OpenCV库中cv::Mat类的使用方法和技巧。cv::Mat作为OpenCV中用于存储图像数据的基本数据结构,其使用范围广泛且功能强大。通过本文,你将了解cv::Mat的创建、访问和修改数据的基本操作,以及其在图像处理任务中的具体应用。此外,我还会分享一些在使用cv::Mat时可能遇到的常见问题及其解决方案,帮助你更好地掌握这一工具。无论你是OpenCV的新手还是资深用户,相信这篇博客都能为你提供有价值的参考和启示。原创 2020-11-23 19:00:54 · 3529 阅读 · 1 评论