点云数据处理常用外部库(C++/Windows)的项目配置

news2024/9/16 23:45:52

一、点云数据处理常用外部库(C++版本)的下载安装与项目配置

(一)PCL

        基于VS2019编程平台的PCL外部库下载安装及项目配置已有大量博客,本文不再赘述。具体下载安装及项目配置流程可参考外部库编译配置参考资料/*1*/ 。需要注意的是,自PCL 1.13.0版本以来,采用的是msvc2022编译器,而本文是基于VS2019的msvc2019编译器配置的,因此选择版本PCL 1.12.1。

1、项目配置测试代码

#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
int main(int argc, char** argv)
{
    srand((unsigned int)time(NULL));
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    // 创建点云数据
    cloud->width = 1000;
    cloud->height = 1;
    cloud->points.resize(cloud->width * cloud->height);
    for (size_t i = 0; i < cloud->points.size(); ++i)
    {
        cloud->points[i].x = 1024.0f * rand() / (RAND_MAX + 1.0f);
        cloud->points[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);
        cloud->points[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);
    }
    pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1);
    octree.setInputCloud(cloud);
    octree.addPointsFromInputCloud();
    pcl::PointXYZ searchPoint;
    searchPoint.x = 1024.0f * rand() / (RAND_MAX + 1.0f);
    searchPoint.y = 1024.0f * rand() / (RAND_MAX + 1.0f);
    searchPoint.z = 1024.0f * rand() / (RAND_MAX + 1.0f);
    //半径内近邻搜索
    vector<int>pointIdxRadiusSearch;
    vector<float>pointRadiusSquaredDistance;
    float radius = 256.0f * rand() / (RAND_MAX + 1.0f);
    cout << "Neighbors within radius search at (" << searchPoint.x
        << " " << searchPoint.y
        << " " << searchPoint.z
        << ") with radius=" << radius << endl;
    if (octree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)
    {
        for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)
            cout << " " << cloud->points[pointIdxRadiusSearch[i]].x
            << " " << cloud->points[pointIdxRadiusSearch[i]].y
            << " " << cloud->points[pointIdxRadiusSearch[i]].z
            << " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << endl;
    }
    // 初始化点云可视化对象
    boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("pcl cloud point"));
    viewer->setBackgroundColor(0, 0, 0); //设置背景颜色为黑色
    // 对点云着色可视化 (red).
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 0, 0);
    viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");
    // 等待直到可视化窗口关闭
    while (!viewer->wasStopped())
    {
        viewer->spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(1000));
    }
    return 0;
}

2、项目配置测试结果

图一 PCL项目配置测试代码结果图

(二)Open3D

        Open3D具有Python和C++两个版本,由于Python较于C++易于学习且外部库下载安装极其简单,因此,Open3D的Python版本更多被人们使用。对于C++版本的Open3D下载安装及项目配置而言,CSDN平台目前更多的是针对源码进行编译及配置,具体下载安装及项目配置流程可参考外部库编译配置参考资料/*3*/ /*2*//*4*/,而其它方法较少。因此,本文提供一种基于Windows(×64)系统直接使用官方编译好的C++版本的Open3D_Release的二进制包文档方法。

直接下载安装二进制包文档并项目配置的方法流程

1、open3d-devel-windows-amd64-0.18.0.zip文件下载

图二  基于Windows系统Open3D的C++编译后二进制包文档下载流程图

2、项目环境配置

        针对步骤五,既可以通过在项目属性页-调试-环境中编辑环境值,也可以通过添加系统环境变量解决。值得注意的是,系统环境变量通常具有最大设置字节数,因此,若该外部库常用于不同的项目即可选择添加系统环境变量;反之,可选择在项目属性页-调试-环境中编辑环境值。不同的更新版本可能具有不同的项目环境配置,具体可依据报错提示尝试或使用进阶CMake管理。

图三 项目环境配置流程图示

3、项目配置测试代码

#include <iostream>
#include <random>
#include <Open3D/Open3D.h>

using namespace std;

int main(int argc, char* argv[])
{
	auto noise_cloud = std::make_shared<open3d::geometry::PointCloud>();
	int N = 10000;
	noise_cloud->points_.resize(N);
	normal_distribution<> norm{ 0, 0.002 };
	random_device rd;
	default_random_engine rng{ rd() };
	for (size_t i = 0; i < N; ++i)
	{
		noise_cloud->points_[i][0] = norm(rng);
		noise_cloud->points_[i][1] = norm(rng);
		noise_cloud->points_[i][2] = norm(rng);
	}
	open3d::io::WritePointCloudToPCD("Gaiss_noise.pcd", *noise_cloud, false);
	open3d::visualization::DrawGeometries({ noise_cloud }, "PointCloud", 1600, 900);
	return 0;
}

4、项目配置测试结果

图四 Open3d_C++项目配置测试代码结果图

(三)OpenCV

         基于VS2019编程平台的OpenCV外部库下载安装及项目配置已有大量博客,本文不再赘述。具体下载安装及项目配置流程可参考外部库编译配置参考资料/*5*/

1、项目配置测试代码

// 测试代码一

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
    std::cout << "OpenCV_Version: " << CV_VERSION << std::endl;
    cv::waitKey(0);
    return 0;
}


// 测试代码二

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
    //读取图片
    Mat img = imread("C:\\Users\\hasee\\Pictures\\Saved Pictures\\icon.jpg", cv::IMREAD_UNCHANGED);
    if (img.empty()) {
        std::cout << "加载图片失败" << std::endl;
    }
    else {
        imshow("image", img);  
    }
    waitKey(0);            
    return 0;
}

2、项目配置测试结果

图五 OpenCV_C++项目配置测试代码结果图

(四)注意事项

综合记录

1、#include指令可以使用双引号或尖括号来指定要包含的文件的路径,双引号""表示使用相对路径或绝对路径,尖括号表示使用绝对路径或系统路径;

2、设置调试环境,既可以直接添加系统环境变量(系统环境变量具有最大设置字节数),也可以通过在VS2019的项目属性页-调试-环境中编辑环境值。

外部库编译配置参考资料:

/*1*/  PCL1.9.1下载与配置+Visual Studio2017_pcl下载server-CSDN博客

/*2*/  Win10 系统下VisualStudio2019 配置Open3D-0.13.0(C++)_c++编译open3d-CSDN博客

/*3*/  windows10编译open3d 0.13_open3d官网-CSDN博客

/*4*/ vs2019配置运行open3d例子_vs窗体如何打开3d文件-CSDN博客

/*5*/  38、OpenCV之C++教程_opencv c++-CSDN博客

外部库API使用手册:

/**1**/ Introduction — Point Cloud Library 0.0 documentation

/**2**/ Open3D (C++ API): Main Page

/**3**/ https://docs.opencv.org/4.9.0/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1471560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux+fortify

系统版本:Ubuntu22.04桌面版 一:登录root用户关闭防火墙 sudo passwd root systemctl stop ufw.service systemctl disable ufw.service 二:开启ssh服务 sudo apt update sudo apt install openssh-server sudo systemctl start ssh sudo systemctl status ssh连接上WinS…

开年大吉!安全狗入选工信部工业互联网试点示范名单

近日&#xff0c;工业和信息化部信息通信管理局公布了2023年工业互联网试点示范名单。此次名单根据《工业和信息化部办公厅关于组织开展2023年工业互联网试点示范项目申报工作的通知》&#xff08;工信厅信管函﹝2023﹞319号&#xff09;&#xff0c;经企业申报、地方推荐、专家…

亚马逊测评 能让买家更快速的喜欢上你的产品,提高转化率

在当今的电子商务时代&#xff0c;亚马逊作为全球最大的在线零售商之一&#xff0c;已经成为了消费者购买各种商品的首选平台。然而&#xff0c;对于消费者来说&#xff0c;如何选择适合自己的产品成为了他们面临的一大难题。因此&#xff0c;本文将介绍亚马逊上如何让买家通过…

盲盒小程序开发:探索技术与创意的融合

盲盒&#xff0c;这种充满惊喜和趣味性的商品销售模式&#xff0c;近年来在国内市场迅速崛起。它结合了收藏、交换、抽奖等多种消费体验&#xff0c;吸引了大量年轻消费者。随着移动互联网的普及&#xff0c;盲盒小程序的开发为这一市场注入了新的活力。本文将探讨盲盒小程序开…

yolov8学习笔记(二)模型训练

目录 yolov8的模型训练 1、制作数据集&#xff08;标记数据集&#xff09; 2、模型训练&#xff08;标记数据集、参数设置、跟踪模型随时间的性能变化&#xff09; 2.1、租服务器训练 2.2、加训练参数 2.3、看训练时的参数&#xff08;有条件&#xff0c;就使用TensorBoard&…

BFS中的多源BFS-双端队列BFS

2024-01-30(树与图的深度优先遍历、广度优先遍历、拓扑排序&#xff09;-CSDN博客 2024-01-31&#xff08;最短路径&#xff09;-CSDN博客 多源BFS 173. 矩阵距离 - AcWing题库 求出每个位置到所有为1的点的最短距离 import java.util.*; import java.io.*;class PII{int…

linux系统---安装使用nginx

目录 一、编译安装Nginx 1、关闭防火墙&#xff0c;将安装nginx所需要软件包传到/opt目录下 ​编辑2、安装依赖包 3、创建运行用户、组 4、编译安装nginx 5、创建软链接后直接nginx启动 ​编辑 6、创建nginx自启动文件 ​编辑6.1 重新加载配置、设置开机自启并开启服务…

LeetCode_Java_动态规划系列(1)(题目+思路+代码)

目录 斐波那契类型 746.使用最小花费爬楼梯 矩阵 120. 三角形最小路径和 斐波那契类型 746.使用最小花费爬楼梯 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。…

知网G4《教育界》正规期刊吗?投稿难吗?

知网G4《教育界》正规期刊吗&#xff1f;投稿难吗&#xff1f; 《教育界》杂志&#xff0c;定位于教育专业的教育类权威性学术期刊&#xff0c;教育类核心期刊&#xff0c;本刊是经国家新闻出版出版总署批准的纯教育类权威期刊。 《教育界》知网G4,刊期24年底&#xff0c;收幼…

【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征

基于DEM/LUCC等数据统计得到各集水区流域特征 提取不同集水区各类土地利用类型比例步骤1&#xff1a;划分集水区为独立面单元步骤2&#xff1a;批量掩膜提取得到各集水区土地利用类型比例步骤3&#xff1a;导入各集水区LUCC数据并统计得到各类型占比 提取坡度特征提取河网密度特…

SQL-多表查询

多表关系 一对多&#xff08;多对一&#xff09; 在多的一方建立外键&#xff0c;指向一的一方的主键。多对多 建立第三张中间表&#xff0c;中间表至少包含两个外键&#xff0c;分别关联两方主键。一对一 在任意一方加入外键&#xff0c;关联另外一方的主键&#xff0c;并且设…

【算法 - 动态规划】找零钱问题Ⅰ

在前面的动态规划系列文章中&#xff0c;关于如何对递归进行分析的四种基本模型都介绍完了&#xff0c;再来回顾一下&#xff1a; 从左到右模型 &#xff1a;arr[index ...] 从 index 之前的不用考虑&#xff0c;只考虑后面的该如何选择 。范围尝试模型 &#xff1a;思考 [L ,…

[面试]我们常说的负载均衡是什么东西?

什么是负载均衡 如果用户量很多, 服务器的流量也随之增大, 此时出现两个问题, 软件性能下降 容易出现单点故障 为了解决这些问题, 引入了集群化架构, 也就是把一个软件同时部署在多个服务器上 集群化架构出现的问题 架构改变后又出现了两个问题 如何将请求均匀的发送到多…

代码随想录day34--动态规划的应用2 | LeetCode343.整数拆分、LeetCode96.不同的二叉搜索树

LeetCode343.整数拆分 题目描述&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。…

mysql数据同步组件

# 要求&#xff1a; 支持实时同步&#xff0c; 支持增量同步&#xff0c; 不用写业务逻辑&#xff0c; 支持Mysql之间同步&#xff0c; 活跃度高。 # 可选组件&#xff1a;canal ,debezium, datax , Databus, Flinkx , Bifrost &#xff1a; Bifrost 特点&#xff1a; 1. …

Stable Diffusion 绘画入门教程(webui)-ControlNet(线稿约束)

上篇文章介绍了openpose&#xff0c;本篇文章介绍下线稿约束&#xff0c;关于线稿约束有好几个处理器都属于此类型&#xff0c;但是有一些区别。 包含&#xff1a; 1、Canny(硬边缘&#xff09;&#xff1a;识别线条比较多比较细&#xff0c;一般用于更大程度得还原照片 2、ML…

2024年西安市省级工业互联网平台申报条件材料、时间流程

一、申报条件 (一)申报单位须在西安市内登记注册,具有独立的法人资格和规范的财务管理制度,无不良信用记录,照章依法纳税。 (二)面向陕西省支持的35个工业重点产业方向内的中小企业提供服务,围绕各类型工业场景,加快企业内部信息化系统综合集成和云化改造,连接设备、软件、工…

【FPGA】线性反馈移位寄存器(LFSR)的Verilog实现

什么是移位寄存器 移位寄存器&#xff1a;是指多个寄存器并排相连&#xff0c;前一个寄存器的输出作为下一个寄存器的输入&#xff0c;寄存器中存放的数据在每个时钟周期向左或向右移动一位。 下面的右移移位寄存器因为左侧没有有效输入&#xff0c;所以在第4个时钟周期&…

转本考前如何调整心态

不少同学还在过年的氛围中还没走出来。 担忧自己成绩不进反退&#xff0c;又不知道该如何调整心态&#xff01;这个时候小编就有几点小建议给到各位考生。 *心态*情绪 良好的考试心态是没有固定的心态&#xff0c;对不同学习情况的学生来说&#xff0c;良好的考试心态是不一…

微信小程序--怎样在小程序中创建地图并渲染数据中的点标记

效果&#xff1a; 首先--创建地图 使用官方文档中的地图组件 map <map id"mapId" class"map" longitude"{{longitude}}" latitude"{{latitude}}" markers"{{markers}}"></map> 其中的属性值&#xff1a; lon…