每次都找不到最简单的显示代码,刚好又报错了,索性记录一下:
/usr/include/pcl/point_cloud.h:46:10: fatal error: Eigen/StdVector: 没有那个文件或目录
#include <Eigen/StdVector>
找不到pcl/io/pcd_io.h: 没有那个文件或目录
这是因为include的时候,找都是在/usr/include/这个路径,而其带了一些前缀,所以这样操作就好了
sudo ln -s /usr/include/eigen3/Eigen/ /usr/include/Eigen
sudo ln -s /usr/include/pcl-1.8/Eigen/ /usr/include/pcl
还有一点就算pcl只能读取float类型的pcd和ply文件。。。。,然后open3d好像默认生成的是double的类型,所以自己用文本编辑器改一下类型可以,改称这样就ok了:
ply
format ascii 1.0
comment Created by Open3D
element vertex 2668816
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
代码如下
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/io/ply_io.h>//PCL的PLY格式文件的输入输出头文件
using namespace std;
typedef pcl::PointXYZ PointT;
int main(int argc, char* argv[])
{
if(argc < 2) return 0;
string pcd_path = argv[1];
//------------------------------------ 加载点云 ---------------------------------
pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
pcl::PCDReader reader;
if (pcl::io::loadPLYFile <pcl::PointXYZ>(pcd_path, *cloud) == -1)//读取PLY文件
//if (pcl::io::loadPCDFile <pcl::PointXYZ>(pcd_path, *cloud) == -1)
{
PCL_ERROR("\a->点云文件不存在!\n");
system("pause");
return -1;
}
cout << "->加载了 " << cloud->points.size() << " 个数据点" << endl;
//==============================================================================
//------------------------------- 自定义颜色显示 --------------------------------
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("指定坐标字段渲染"));
pcl::visualization::PointCloudColorHandlerGenericField<PointT> renderColor(cloud, "z"); //指定坐标字段
viewer->addPointCloud<PointT>(cloud, renderColor, "sample_cloud"); //添加点云和颜色信息
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample_cloud"); //设置点的大小
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(10000));
}
//==============================================================================
return 0;
}
CMakeLists.txt如下:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(project_name)
set( CMAKE_BUILD_TYPE "Debug" )
set(CMAKE_CXX_FLAGS "-std=c++11")
find_package(PCL 1.8 REQUIRED)
message("PCL_INCLUDE_DIRS=${PCL_INCLUDE_DIRS}")
add_executable (show_pcd show_pcd.cpp)
target_link_libraries(show_pcd ${PCL_LIBRARIES})
reference:
https://blog.csdn.net/weixin_46098577/article/details/115530811?spm=1001.2014.3001.5501
https://blog.csdn.net/qq_43393323/article/details/107128451