先贴代码(github上找的)
#pragma comment(lib, "User32.lib")
#pragma comment(lib, "gdi32.lib")
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/features/normal_3d.h>
#include <pcl/surface/gp3.h>
#include <pcl/visualization/pcl_visualizer.h>
int main(int argc, char** argv)
{
//将ply格式转换为pcd格式
pcl::PLYReader reader;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudyjp(new pcl::PointCloud<pcl::PointXYZ>);
reader.read<pcl::PointXYZ>("D:\Point_Cloud_File\bun000.ply", *cloudyjp);
pcl::io::savePCDFile("D:\Point_Cloud_File\bun0.pcd", *cloudyjp);
//加载输入文件,格式要匹配
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PCLPointCloud2 cloud_blob;
pcl::io::loadPCDFile("bun0.pcd", cloud_blob);
pcl::fromPCLPointCloud2(cloud_blob, *cloud);
//* 数据需要先读入pclpointcloud2中,有用的导入cloud
//法线估计
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
tree->setInputCloud(cloud);
n.setInputCloud(cloud);
n.setSearchMethod(tree);
n.setKSearch(20);
n.compute(*normals);
//* 法线不包含曲率
//拼接XYZ和法线
pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>);
pcl::concatenateFields(*cloud, *normals, *cloud_with_normals);
//* cloud_with_normals=cloud +normals
//创建搜索树
pcl::search::KdTree<pcl::PointNormal>::Ptr tree2(new pcl::search::KdTree<pcl::PointNormal>);
tree2->setInputCloud(cloud_with_normals);
//初始化目标
pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3;
pcl::PolygonMesh triangles;
//设置搜索半径(最大边长度)
gp3.setSearchRadius(0.025);
//设置贪婪三角投影算法的参数值
gp3.setMu(2.5);
gp3.setMaximumNearestNeighbors(100);
gp3.setMaximumSurfaceAngle(M_PI / 4);//45度
gp3.setMinimumAngle(M_PI / 18);//10度
gp3.setMaximumAngle(2 * M_PI / 3);//120度
gp3.setNormalConsistency(false);
//获取结果
gp3.setInputCloud(cloud_with_normals);
gp3.setSearchMethod(tree2);
gp3.reconstruct(triangles);
//额外的顶点信息
std::vector<int> parts = gp3.getPartIDs();
std::vector<int> states = gp3.getPointStates();
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
viewer->setBackgroundColor(0, 0, 0);
viewer->addPolygonMesh(triangles, "triangles");
viewer->addCoordinateSystem(1.0);
viewer->initCameraParameters();
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
}
return 0;
}
经过了一系列调试之后我遇到了这个很懵逼的事情,下面是错误描述
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 deflateEnd,该符号在函数 "protected: void __cdecl boost::iostreams::detail::zlib_base::reset(bool,bool)" (?reset@zlib_base@detail@iostreams@boost@@IEAAX_N0@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK2001 无法解析的外部符号 "public: virtual void __cdecl pcl::visualization::PCLVisualizer::FPSCallback::Execute(class vtkObject *,unsigned long,void )" (?Execute@FPSCallback@PCLVisualizer@visualization@pcl@@UEAAXPEAVvtkObject@@KPEAX@Z) Project1 C:\Users\admin\source\repos\Project1\Project1\源.obj 1
错误 LNK2019 无法解析的外部符号 deflate,该符号在函数 "protected: int __cdecl boost::iostreams::detail::zlib_base::xdeflate(int)" (?xdeflate@zlib_base@detail@iostreams@boost@@IEAAHH@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK2019 无法解析的外部符号 inflate,该符号在函数 "protected: int __cdecl boost::iostreams::detail::zlib_base::xinflate(int)" (?xinflate@zlib_base@detail@iostreams@boost@@IEAAHH@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK2019 无法解析的外部符号 inflateEnd,该符号在函数 "protected: void __cdecl boost::iostreams::detail::zlib_base::reset(bool,bool)" (?reset@zlib_base@detail@iostreams@boost@@IEAAX_N0@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK2019 无法解析的外部符号 deflateReset,该符号在函数 "protected: void __cdecl boost::iostreams::detail::zlib_base::reset(bool,bool)" (?reset@zlib_base@detail@iostreams@boost@@IEAAX_N0@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK2019 无法解析的外部符号 inflateReset,该符号在函数 "protected: void __cdecl boost::iostreams::detail::zlib_base::reset(bool,bool)" (?reset@zlib_base@detail@iostreams@boost@@IEAAX_N0@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK2019 无法解析的外部符号 crc32,该符号在函数 "protected: void __cdecl boost::iostreams::detail::zlib_base::after(char const * &,char * &,bool)" (?after@zlib_base@detail@iostreams@boost@@IEAAXAEAPEBDAEAPEAD_N@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK2019 无法解析的外部符号 deflateInit2_,该符号在函数 "private: void __cdecl boost::iostreams::detail::zlib_base::do_init(struct boost::iostreams::zlib_params const &,bool,void * (__cdecl)(void ,unsigned int,unsigned int),void (__cdecl)(void *,void *),void )" (?do_init@zlib_base@detail@iostreams@boost@@AEAAXAEBUzlib_params@34@_NP6APEAXPEAXII@ZP6AX22@Z2@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK2019 无法解析的外部符号 inflateInit2_,该符号在函数 "private: void __cdecl boost::iostreams::detail::zlib_base::do_init(struct boost::iostreams::zlib_params const &,bool,void * (__cdecl)(void ,unsigned int,unsigned int),void (__cdecl)(void *,void *),void *)" (?do_init@zlib_base@detail@iostreams@boost@@AEAAXAEBUzlib_params@34@_NP6APEAXPEAXII@ZP6AX22@Z2@Z) 中被引用 Project1 C:\Users\admin\source\repos\Project1\Project1\libboost_iostreams-vc141-mt-gd-1_64.lib(zlib.obj) 1
错误 LNK1120 10 个无法解析的外部命令 Project1 C:\Users\admin\source\repos\Project1\x64\Debug\Project1.exe 1
请问各位大佬这个问题该如何解决,孩子刚学三维重建,现在一脸懵逼,求求了!!!
boost的iostream库没引入吧,链接器-输入-附加依赖项加入,对应boost的iostream的lib
或者你编译Boost时,忘了编译iostreams