一、点云数据处理常用外部库(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、项目配置测试结果
(二)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文件下载
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、项目配置测试结果
(三)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、项目配置测试结果
(四)注意事项
综合记录
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/