当前位置: 首页 > news >正文

天津做网站贵吗wordpress大前端dux主题

天津做网站贵吗,wordpress大前端dux主题,asp.net 窗体网站,可以拿自己电脑做网站主机一、下载visual studio2022 下载网址#xff1a;Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 安装的时候选择使用C的桌面开发“#xff0c;同时可以修改文件路径#xff0c;可以放在D盘。修改文件路径的时候#xff0c;共享组件、… 一、下载visual studio2022 下载网址Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 安装的时候选择使用C的桌面开发“同时可以修改文件路径可以放在D盘。修改文件路径的时候共享组件、工具和SDK的路径无法修改可能是因为你之前有安装过Visual studio。可以通过以下操作解决 1.首先WINR输入regedit回车 2.按照这个顺序展开目录 HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudioSetup 3.右键删除SharedInstallationPath 和 CachePath就可以修改共享组件、工具和SDK的路径了 二、安装PCL1.14.0 都是以我自己的安装路径为例 1.下载 官网下载Releases · PointCloudLibrary/pcl · GitHub 只要下载PCL-1.14.0-AllInOne-msvc2022-win64.exe和pcl-1.14.0-pdb-msvc2022-win64.zip两个文件即可。 如果下载太慢我这里已经下载好了 链接https://pan.baidu.com/s/177DvR5gOcVL7iPm4xI7s_w  提取码wstc  2.安装 点击PCL-1.14.0-AllInOne-msvc2022-win64.exe进行安装 下一步 我接受 选择Add PCL to the system Path for all users下一步 可以选择修改路径我自己的路径是C:\Compiler\PCL\PCL 1.14.0你可以选择自己的路径不过一定要记得因为之后配置环境变量要用到然后下一步 没必要创建快捷方式下一步然后点击安装在安装过程中会出现提醒你变量名太长没办法写入环境变量这个时候你直接确定就行等安装完成之后自己配置环境变量。安装完成之后会出现这三个应用 把OpenNi2.2 SDK for Windows 64-bit给卸载掉因为它有默认安装路径即使我们修改文件安装路径它还是安装在默认路径卸载完之后打开C:\Compiler\PCL\PCL 1.14.0\3rdParty\OpenNI2文件夹发现里面有一个OpenNI-Windows-x64-2.2.msi这是安装PCL-1.14.0-AllInOne-msvc2022-win64.exe的时候附带的点击安装可以帮你再次安装OpenNi2.2 SDK for Windows 64-bit而且可以修改成自己的路径我的路径是C:\Compiler\PCL\PCL 1.14.0\3rdParty\OpenNI2 安装完成之后就会包含这些内容 接着把pcl-1.14.0-pdb-msvc2022-win64.zip解压 把里面的所有pdb文件都复制到C:\Compiler\PCL\PCL 1.14.0\bin里面 3.配置环境变量 此电脑右键属性 点击高级系统设置 点击环境变量 确保这四个都存在这是安装PCL-1.14.0-AllInOne-msvc2022-win64.exe的时候自动生成的接着点击Path开始配置环境变量 C:\Compiler\PCL\PCL 1.14.0\bin C:\Compiler\PCL\PCL 1.14.0\3rdParty\VTK\bin C:\Compiler\PCL\PCL 1.14.0\3rdParty\OpenNI2\Tools C:\Compiler\PCL\PCL 1.14.0\3rdParty\OpenNI2\Redist C:\Compiler\PCL\PCL 1.14.0\3rdParty\Boost\lib C:\Compiler\PCL\PCL 1.14.0\3rdParty\Qhull\bin C:\Compiler\PCL\PCL 1.14.0\3rdParty\FLANN\bin 把这几个路径添加进环境变量即可。 三、创建项目 打开visual studio2022 创建新项目 选择空项目下一步 可以修改项目名称和位置创建项目 右键点击源文件添加新项随便取个名字点击添加注意我已经添加过文件了如果是新创建的文件源文件里面是啥也没有的 右键点击解决方案下方的pointCloud这个是项目名称点击属性就会出现这个属性页点击VC目录 C:\Compiler\PCL\PCL 1.14.0\3rdParty\Boost\include\boost-1_84 C:\Compiler\PCL\PCL 1.14.0\3rdParty\Eigen3\include\eigen3 C:\Compiler\PCL\PCL 1.14.0\3rdParty\FLANN\include C:\Compiler\PCL\PCL 1.14.0\3rdParty\Qhull\include C:\Compiler\PCL\PCL 1.14.0\3rdParty\VTK\include\vtk-9.3 C:\Compiler\PCL\PCL 1.14.0\3rdParty\OpenNI2\Include C:\Compiler\PCL\PCL 1.14.0\include\pcl-1.14 把这些路径加入到包含目录里 C:\Compiler\PCL\PCL 1.14.0\3rdParty\FLANN\lib C:\Compiler\PCL\PCL 1.14.0\3rdParty\Boost\lib C:\Compiler\PCL\PCL 1.14.0\lib C:\Compiler\PCL\PCL 1.14.0\3rdParty\VTK\lib C:\Compiler\PCL\PCL 1.14.0\3rdParty\Qhull\lib C:\Compiler\PCL\PCL 1.14.0\3rdParty\OpenNI2\Lib 这些路径放到库目录里 然后点击C/C的所有选项把SDL检查改成否 再点击C/C的代码生成修改启用增强指令集为高级适量扩展(X86/X64)(/arch:AVX) BOOST_USE_WINDOWS_H NOMINMAX _CRT_SECURE_NO_DEPRECATE 在C/C的预处理器里面的预处理定义增加这三行 可以用代码获取附加项文件名 #include iostream #include fstream #include string #include filesystem namespace fs std::filesystem;bool ends_with(const std::string value, const std::string ending) {if (ending.size() value.size()) return false;return std::equal(ending.rbegin(), ending.rend(), value.rbegin()); }int main() {std::string path1 C:\\Compiler\\PCL\\PCL 1.14.0\\3rdParty\\VTK\\lib\\; // 你需要替换为你的具体路径std::string path2 C:\\Compiler\\PCL\\PCL 1.14.0\\lib\\; // 你需要替换为你的具体路径std::ofstream ofs_glib1(gLibFiles1.txt);std::ofstream ofs_other1(otherFiles1.txt);std::ofstream ofs_glib2(gLibFiles2.txt);std::ofstream ofs_other2(otherFiles2.txt);if (!ofs_glib1 || !ofs_other1) {std::cerr 无法打开输出文件.\n;return 1;}if (!ofs_glib2 || !ofs_other2) {std::cerr 无法打开输出文件.\n;return 1;}for (auto p : fs::directory_iterator(path1)) {if (p.is_regular_file()) {std::string filename p.path().filename().string();if (ends_with(filename, -gd.lib) || ends_with(filename, d.lib)) { // 检查文件名是否以 -gd.lib 或 d.lib 结尾ofs_glib1 filename \n;}else {ofs_other1 filename \n;}}}for (auto p : fs::directory_iterator(path2)) {if (p.is_regular_file()) {std::string filename p.path().filename().string();if (ends_with(filename, -gd.lib) || ends_with(filename, d.lib)) { // 检查文件名是否以 -gd.lib 或 d.lib 结尾ofs_glib2 filename \n;}else {ofs_other2 filename \n;}}}return 0; }//C:\\Compiler\\PCL\\PCL 1.14.0\\3rdParty\\VTK\\lib\\ 一共可以得到四个txt文件 上面两个保存的是Debug版本的附加项 把这两个文件的内容整合到一起 pcl_commond.lib pcl_featuresd.lib pcl_filtersd.lib pcl_iod.lib pcl_io_plyd.lib pcl_kdtreed.lib pcl_keypointsd.lib pcl_mld.lib pcl_octreed.lib pcl_outofcored.lib pcl_peopled.lib pcl_recognitiond.lib pcl_registrationd.lib pcl_sample_consensusd.lib pcl_searchd.lib pcl_segmentationd.lib pcl_stereod.lib pcl_surfaced.lib pcl_trackingd.lib pcl_visualizationd.lib vtkcgns-9.3-gd.lib vtkChartsCore-9.3-gd.lib vtkCommonColor-9.3-gd.lib vtkCommonComputationalGeometry-9.3-gd.lib vtkCommonCore-9.3-gd.lib vtkCommonDataModel-9.3-gd.lib vtkCommonExecutionModel-9.3-gd.lib vtkCommonMath-9.3-gd.lib vtkCommonMisc-9.3-gd.lib vtkCommonSystem-9.3-gd.lib vtkCommonTransforms-9.3-gd.lib vtkDICOMParser-9.3-gd.lib vtkDomainsChemistry-9.3-gd.lib vtkDomainsChemistryOpenGL2-9.3-gd.lib vtkdoubleconversion-9.3-gd.lib vtkexodusII-9.3-gd.lib vtkexpat-9.3-gd.lib vtkFiltersAMR-9.3-gd.lib vtkFiltersCore-9.3-gd.lib vtkFiltersExtraction-9.3-gd.lib vtkFiltersFlowPaths-9.3-gd.lib vtkFiltersGeneral-9.3-gd.lib vtkFiltersGeneric-9.3-gd.lib vtkFiltersGeometry-9.3-gd.lib vtkFiltersHybrid-9.3-gd.lib vtkFiltersHyperTree-9.3-gd.lib vtkFiltersImaging-9.3-gd.lib vtkFiltersModeling-9.3-gd.lib vtkFiltersParallel-9.3-gd.lib vtkFiltersParallelImaging-9.3-gd.lib vtkFiltersPoints-9.3-gd.lib vtkFiltersProgrammable-9.3-gd.lib vtkFiltersSelection-9.3-gd.lib vtkFiltersSMP-9.3-gd.lib vtkFiltersSources-9.3-gd.lib vtkFiltersStatistics-9.3-gd.lib vtkFiltersTexture-9.3-gd.lib vtkFiltersTopology-9.3-gd.lib vtkFiltersVerdict-9.3-gd.lib vtkfmt-9.3-gd.lib vtkfreetype-9.3-gd.lib vtkGeovisCore-9.3-gd.lib vtkgl2ps-9.3-gd.lib vtkglew-9.3-gd.lib vtkhdf5-9.3-gd.lib vtkhdf5_hl-9.3-gd.lib vtkImagingColor-9.3-gd.lib vtkImagingCore-9.3-gd.lib vtkImagingFourier-9.3-gd.lib vtkImagingGeneral-9.3-gd.lib vtkImagingHybrid-9.3-gd.lib vtkImagingMath-9.3-gd.lib vtkImagingMorphological-9.3-gd.lib vtkImagingSources-9.3-gd.lib vtkImagingStatistics-9.3-gd.lib vtkImagingStencil-9.3-gd.lib vtkInfovisCore-9.3-gd.lib vtkInfovisLayout-9.3-gd.lib vtkInteractionImage-9.3-gd.lib vtkInteractionStyle-9.3-gd.lib vtkInteractionWidgets-9.3-gd.lib vtkIOAMR-9.3-gd.lib vtkIOAsynchronous-9.3-gd.lib vtkIOCesium3DTiles-9.3-gd.lib vtkIOCGNSReader-9.3-gd.lib vtkIOChemistry-9.3-gd.lib vtkIOCityGML-9.3-gd.lib vtkIOCONVERGECFD-9.3-gd.lib vtkIOCore-9.3-gd.lib vtkIOEnSight-9.3-gd.lib vtkIOExodus-9.3-gd.lib vtkIOExport-9.3-gd.lib vtkIOExportGL2PS-9.3-gd.lib vtkIOExportPDF-9.3-gd.lib vtkIOGeometry-9.3-gd.lib vtkIOHDF-9.3-gd.lib vtkIOImage-9.3-gd.lib vtkIOImport-9.3-gd.lib vtkIOInfovis-9.3-gd.lib vtkIOIOSS-9.3-gd.lib vtkIOLegacy-9.3-gd.lib vtkIOLSDyna-9.3-gd.lib vtkIOMINC-9.3-gd.lib vtkIOMotionFX-9.3-gd.lib vtkIOMovie-9.3-gd.lib vtkIONetCDF-9.3-gd.lib vtkIOOggTheora-9.3-gd.lib vtkIOParallel-9.3-gd.lib vtkIOParallelXML-9.3-gd.lib vtkIOPLY-9.3-gd.lib vtkIOSegY-9.3-gd.lib vtkIOSQL-9.3-gd.lib vtkioss-9.3-gd.lib vtkIOTecplotTable-9.3-gd.lib vtkIOVeraOut-9.3-gd.lib vtkIOVideo-9.3-gd.lib vtkIOXML-9.3-gd.lib vtkIOXMLParser-9.3-gd.lib vtkjpeg-9.3-gd.lib vtkjsoncpp-9.3-gd.lib vtkkissfft-9.3-gd.lib vtklibharu-9.3-gd.lib vtklibproj-9.3-gd.lib vtklibxml2-9.3-gd.lib vtkloguru-9.3-gd.lib vtklz4-9.3-gd.lib vtklzma-9.3-gd.lib vtkmetaio-9.3-gd.lib vtknetcdf-9.3-gd.lib vtkogg-9.3-gd.lib vtkParallelCore-9.3-gd.lib vtkParallelDIY-9.3-gd.lib vtkpng-9.3-gd.lib vtkpugixml-9.3-gd.lib vtkRenderingAnnotation-9.3-gd.lib vtkRenderingContext2D-9.3-gd.lib vtkRenderingContextOpenGL2-9.3-gd.lib vtkRenderingCore-9.3-gd.lib vtkRenderingFreeType-9.3-gd.lib vtkRenderingGL2PSOpenGL2-9.3-gd.lib vtkRenderingHyperTreeGrid-9.3-gd.lib vtkRenderingImage-9.3-gd.lib vtkRenderingLabel-9.3-gd.lib vtkRenderingLICOpenGL2-9.3-gd.lib vtkRenderingLOD-9.3-gd.lib vtkRenderingOpenGL2-9.3-gd.lib vtkRenderingSceneGraph-9.3-gd.lib vtkRenderingUI-9.3-gd.lib vtkRenderingVolume-9.3-gd.lib vtkRenderingVolumeOpenGL2-9.3-gd.lib vtkRenderingVtkJS-9.3-gd.lib vtksqlite-9.3-gd.lib vtksys-9.3-gd.lib vtkTestingRendering-9.3-gd.lib vtktheora-9.3-gd.lib vtktiff-9.3-gd.lib vtkverdict-9.3-gd.lib vtkViewsContext2D-9.3-gd.lib vtkViewsCore-9.3-gd.lib vtkViewsInfovis-9.3-gd.lib vtkWrappingTools-9.3-gd.lib vtkzlib-9.3-gd.lib 下面两个保存的是Release版本的附加项把这两个文件的内容整合到一起 pcl_common.lib pcl_features.lib pcl_filters.lib pcl_io.lib pcl_io_ply.lib pcl_kdtree.lib pcl_keypoints.lib pcl_ml.lib pcl_octree.lib pcl_outofcore.lib pcl_people.lib pcl_recognition.lib pcl_registration.lib pcl_sample_consensus.lib pcl_search.lib pcl_segmentation.lib pcl_stereo.lib pcl_surface.lib pcl_tracking.lib pcl_visualization.lib vtkcgns-9.3.lib vtkChartsCore-9.3.lib vtkCommonColor-9.3.lib vtkCommonComputationalGeometry-9.3.lib vtkCommonCore-9.3.lib vtkCommonDataModel-9.3.lib vtkCommonExecutionModel-9.3.lib vtkCommonMath-9.3.lib vtkCommonMisc-9.3.lib vtkCommonSystem-9.3.lib vtkCommonTransforms-9.3.lib vtkDICOMParser-9.3.lib vtkDomainsChemistry-9.3.lib vtkDomainsChemistryOpenGL2-9.3.lib vtkdoubleconversion-9.3.lib vtkexodusII-9.3.lib vtkexpat-9.3.lib vtkFiltersAMR-9.3.lib vtkFiltersCellGrid-9.3.lib vtkFiltersCore-9.3.lib vtkFiltersExtraction-9.3.lib vtkFiltersFlowPaths-9.3.lib vtkFiltersGeneral-9.3.lib vtkFiltersGeneric-9.3.lib vtkFiltersGeometry-9.3.lib vtkFiltersGeometryPreview-9.3.lib vtkFiltersHybrid-9.3.lib vtkFiltersHyperTree-9.3.lib vtkFiltersImaging-9.3.lib vtkFiltersModeling-9.3.lib vtkFiltersParallel-9.3.lib vtkFiltersParallelImaging-9.3.lib vtkFiltersPoints-9.3.lib vtkFiltersProgrammable-9.3.lib vtkFiltersReduction-9.3.lib vtkFiltersSelection-9.3.lib vtkFiltersSMP-9.3.lib vtkFiltersSources-9.3.lib vtkFiltersStatistics-9.3.lib vtkFiltersTensor-9.3.lib vtkFiltersTexture-9.3.lib vtkFiltersTopology-9.3.lib vtkFiltersVerdict-9.3.lib vtkfmt-9.3.lib vtkfreetype-9.3.lib vtkGeovisCore-9.3.lib vtkgl2ps-9.3.lib vtkglew-9.3.lib vtkhdf5-9.3.lib vtkhdf5_hl-9.3.lib vtkImagingColor-9.3.lib vtkImagingCore-9.3.lib vtkImagingFourier-9.3.lib vtkImagingGeneral-9.3.lib vtkImagingHybrid-9.3.lib vtkImagingMath-9.3.lib vtkImagingMorphological-9.3.lib vtkImagingSources-9.3.lib vtkImagingStatistics-9.3.lib vtkImagingStencil-9.3.lib vtkInfovisCore-9.3.lib vtkInfovisLayout-9.3.lib vtkInteractionImage-9.3.lib vtkInteractionStyle-9.3.lib vtkInteractionWidgets-9.3.lib vtkIOAMR-9.3.lib vtkIOAsynchronous-9.3.lib vtkIOCellGrid-9.3.lib vtkIOCesium3DTiles-9.3.lib vtkIOCGNSReader-9.3.lib vtkIOChemistry-9.3.lib vtkIOCityGML-9.3.lib vtkIOCONVERGECFD-9.3.lib vtkIOCore-9.3.lib vtkIOEnSight-9.3.lib vtkIOExodus-9.3.lib vtkIOExport-9.3.lib vtkIOExportGL2PS-9.3.lib vtkIOExportPDF-9.3.lib vtkIOFLUENTCFF-9.3.lib vtkIOGeometry-9.3.lib vtkIOHDF-9.3.lib vtkIOImage-9.3.lib vtkIOImport-9.3.lib vtkIOInfovis-9.3.lib vtkIOIOSS-9.3.lib vtkIOLegacy-9.3.lib vtkIOLSDyna-9.3.lib vtkIOMINC-9.3.lib vtkIOMotionFX-9.3.lib vtkIOMovie-9.3.lib vtkIONetCDF-9.3.lib vtkIOOggTheora-9.3.lib vtkIOParallel-9.3.lib vtkIOParallelXML-9.3.lib vtkIOPLY-9.3.lib vtkIOSegY-9.3.lib vtkIOSQL-9.3.lib vtkioss-9.3.lib vtkIOTecplotTable-9.3.lib vtkIOVeraOut-9.3.lib vtkIOVideo-9.3.lib vtkIOXML-9.3.lib vtkIOXMLParser-9.3.lib vtkjpeg-9.3.lib vtkjsoncpp-9.3.lib vtkkissfft-9.3.lib vtklibharu-9.3.lib vtklibproj-9.3.lib vtklibxml2-9.3.lib vtkloguru-9.3.lib vtklz4-9.3.lib vtklzma-9.3.lib vtkmetaio-9.3.lib vtknetcdf-9.3.lib vtkogg-9.3.lib vtkParallelCore-9.3.lib vtkParallelDIY-9.3.lib vtkpng-9.3.lib vtkpugixml-9.3.lib vtkRenderingAnnotation-9.3.lib vtkRenderingCellGrid-9.3.lib vtkRenderingContext2D-9.3.lib vtkRenderingContextOpenGL2-9.3.lib vtkRenderingCore-9.3.lib vtkRenderingFreeType-9.3.lib vtkRenderingGL2PSOpenGL2-9.3.lib vtkRenderingHyperTreeGrid-9.3.lib vtkRenderingImage-9.3.lib vtkRenderingLabel-9.3.lib vtkRenderingLICOpenGL2-9.3.lib vtkRenderingLOD-9.3.lib vtkRenderingOpenGL2-9.3.lib vtkRenderingSceneGraph-9.3.lib vtkRenderingUI-9.3.lib vtkRenderingVolume-9.3.lib vtkRenderingVolumeOpenGL2-9.3.lib vtkRenderingVtkJS-9.3.lib vtksqlite-9.3.lib vtksys-9.3.lib vtkTestingRendering-9.3.lib vtktheora-9.3.lib vtktiff-9.3.lib vtkverdict-9.3.lib vtkViewsContext2D-9.3.lib vtkViewsCore-9.3.lib vtkViewsInfovis-9.3.lib vtkWrappingTools-9.3.lib vtkzlib-9.3.lib 选择哪个版本看你需求在链接器的输入的附加依赖项里增加相应版本的附加项配置完成电脑重启即可生效 四、确认是否安装成功 #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::PointCloudpcl::PointXYZ::Ptr cloud(new pcl::PointCloudpcl::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::OctreePointCloudSearchpcl::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);//半径内近邻搜索vectorintpointIdxRadiusSearch;vectorfloatpointRadiusSquaredDistance;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_ptrpcl::visualization::PCLVisualizerviewer(new pcl::visualization::PCLVisualizer(v1));viewer-setBackgroundColor(0, 0, 0); //设置背景颜色为黑色// 对点云着色可视化 (red).pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZtarget_color(cloud, 255, 0, 0);viewer-addPointCloudpcl::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); } 这份代码运行之后出现红色点云 五、点云配准 #include pcl/point_types.h #include pcl/point_cloud.h #include pcl/features/fpfh_omp.h #include pcl/io/ply_io.h//pcd输入输出头文件 #include pcl/registration/icp.h//点云icp算法头文件 #include pcl/registration/ndt.h//点云NDT算法头文件 #include pcl/registration/ia_ransac.h//点云ransac迭代对齐算法(SAC-IA)算法头文件 #include pcl/registration/gicp.h//点云GICP算法的头文件 #include pcl/visualization/pcl_visualizer.h//点云可视化头文件 #include time.h #include boost/thread.hpp #include pcl/features/normal_3d_omp.h typedef pcl::PointXYZ PointT; //重定义pcl::PointXYZ为PointT typedef pcl::PointCloudPointT PointCloud; //重定义pcl::PointCloudPointT为PointCloud //点云配准类型 typedef pcl::IterativeClosestPointpcl::PointXYZ, pcl::PointXYZ ICP; typedef pcl::NormalDistributionsTransformpcl::PointXYZ, pcl::PointXYZ NDT; typedef pcl::SampleConsensusInitialAlignmentpcl::PointXYZ, pcl::PointXYZ, pcl::FPFHSignature33 SAC_IA; typedef pcl::GeneralizedIterativeClosestPointpcl::PointXYZ, pcl::PointXYZ GICP; //FPFH特征 typedef pcl::FPFHEstimationOMPpcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33 FPFHEstimation; typedef pcl::PointCloudpcl::FPFHSignature33 FPFH; //法线估计 typedef pcl::NormalEstimationOMPpcl::PointXYZ, pcl::Normal NormalEstimation; typedef pcl::PointCloudpcl::Normal Normal; typedef pcl::search::KdTreepcl::PointXYZ KdTreeT;//点云可视化 void visualize_pcd(PointCloud::Ptr pcd_src,PointCloud::Ptr pcd_tgt,PointCloud::Ptr pcd_final) {pcl::visualization::PCLVisualizer viewer(registration Viewer);// 设置背景viewer.setBackgroundColor(1, 1, 1);// 添加坐标轴到可视化对象参数指定轴的大小长度这里设置为1.0单位长度viewer.addCoordinateSystem(0.5);// 设置相机位置和方向viewer.initCameraParameters();pcl::visualization::PointCloudColorHandlerCustomPointT src_h(pcd_src, 0, 255, 0);pcl::visualization::PointCloudColorHandlerCustomPointT tgt_h(pcd_tgt, 255, 0, 0);pcl::visualization::PointCloudColorHandlerCustomPointT final_h(pcd_final, 0, 0, 255);//viewer.addPointCloud(pcd_src, src_h, source cloud); //source绿色viewer.addPointCloud(pcd_tgt, tgt_h, tgt cloud); //target红色viewer.addPointCloud (pcd_final, final_h, final cloud); //final蓝色while (!viewer.wasStopped()){viewer.spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(1000));} }void printinfo(Eigen::Matrix4f icp_trans, Eigen::Matrix3f rotation, Eigen::Vector3f translation, Eigen::Vector3f euler_angles_deg,Eigen::Quaternionf quaternion) {cout.setf(ios::fixed);cout.precision(5);cout endl Transformation matrix: endl icp_trans endl;//输出变换矩阵cout endl Rotation matrix: endl rotation endl;cout endl Translation vector: endl translation endl;cout endl Euler Angle: endl;cout endl roll(x): euler_angles_deg[2] endl;cout endl pitch(y): euler_angles_deg[1] endl;cout endl yaw(z): euler_angles_deg[0] endl;// 输出四元数,由于欧拉角时常出现万向节所以可以使用四元数来表示旋转这样更精确cout endl Rotation quaternion: endl w quaternion.w() endl , x quaternion.x() endl , y quaternion.y() endl , z quaternion.z() endl; }void downsampling(PointCloud::Ptr cloud_src_o, PointCloud::Ptr cloud_tgt_o,pcl::VoxelGridpcl::PointXYZ::Ptr voxel_grid) {float leaf 0.005f;voxel_grid-setLeafSize(leaf, leaf, leaf); // 示例叶子大小voxel_grid-setInputCloud(cloud_src_o);voxel_grid-filter(*cloud_src_o);voxel_grid-setInputCloud(cloud_tgt_o);voxel_grid-filter(*cloud_tgt_o); } void normalestimation(NormalEstimation ne, Normal::Ptr src_normals, Normal::Ptr tgt_normals, KdTreeT::Ptr tree, PointCloud::Ptr cloud_src_o, PointCloud::Ptr cloud_tgt_o) {创建一个NormalEstimationOMP对象,进行法线计算;ne.setSearchMethod(tree);ne.setKSearch(20);ne.setInputCloud(cloud_src_o);ne.compute(*src_normals);ne.setInputCloud(cloud_tgt_o);ne.compute(*tgt_normals);cout 原点云法线计算完成 endl *src_normals endl;cout 目标点云法线计算完成 endl *tgt_normals endl; }void fpfh_features(FPFHEstimation fpfh, FPFH::Ptr src_fpfhs,FPFH::Ptr tgt_fpfhs, PointCloud::Ptr cloud_src_o, PointCloud::Ptr cloud_tgt_o, KdTreeT::Ptr tree, Normal::Ptr src_normals, Normal::Ptr tgt_normals) {fpfh.setSearchMethod(tree);fpfh.setRadiusSearch(0.05); // Use a radius search instead of a KdTree searchfpfh.setInputCloud(cloud_src_o);fpfh.setInputNormals(src_normals);fpfh.compute(*src_fpfhs);fpfh.setInputCloud(cloud_tgt_o);fpfh.setInputNormals(tgt_normals);fpfh.compute(*tgt_fpfhs);cout 原点云特征计算完成 *src_fpfhs endl; cout 目标点云特征计算完成 *tgt_fpfhs endl; }GICP gicp_registration(GICP gicp, PointCloud final_cloud,PointCloud::Ptr cloud_src_o, PointCloud::Ptr cloud_tgt_o) {gicp.setInputSource(cloud_src_o);gicp.setInputTarget(cloud_tgt_o);// 配准时最大迭代次数gicp.setMaximumIterations(50);// 两次变化矩阵之间的差异小于这个阈值时就认为已经收敛停止迭代gicp.setTransformationEpsilon(1e-6);// 对应点之间的最大距离gicp.setMaxCorrespondenceDistance(0.05);// 采用随机采样一致性方法进行配准gicp.setRANSACOutlierRejectionThreshold(1.5);// 最小内点比例。在RANSAC配准方法中当内点的比例小于此值时认为配准失败。gicp.setRANSACIterations(20);// 执行配准并将结果存储在Final中gicp.align(final_cloud);return gicp;} SAC_IA sacia_registration(SAC_IA sac_ia, PointCloud final_cloud,PointCloud::Ptr cloud_src_o, PointCloud::Ptr cloud_tgt_o,FPFH::Ptr src_fpfhs, FPFH::Ptr tgt_fpfhs) {sac_ia.setInputSource(cloud_src_o);sac_ia.setSourceFeatures(src_fpfhs);sac_ia.setInputTarget(cloud_tgt_o);sac_ia.setTargetFeatures(tgt_fpfhs);// 设置SAC-IA配准的参数sac_ia.setMinSampleDistance(0.05f);sac_ia.setMaxCorrespondenceDistance(0.01f);sac_ia.setMaximumIterations(500);// 创建一个空的PointCloud对象来接收结果pcl::PointCloudpcl::PointXYZ final_registration;// 执行配准并将结果存储在final_registration中sac_ia.align(final_registration);return sac_ia; } NDT ndt_registration(NDT ndt, PointCloud final_cloud,PointCloud::Ptr cloud_src_o, PointCloud::Ptr cloud_tgt_o) {// 配置NDTndt.setTransformationEpsilon(0.1);ndt.setStepSize(0.5);ndt.setResolution(2.0);ndt.setMaximumIterations(20);ndt.setInputSource(cloud_src_o);ndt.setInputTarget(cloud_tgt_o);ndt.align(final_cloud);return ndt; }ICP icp_registration(ICP icp, PointCloud final_cloud, PointCloud::Ptr cloud_src_o, PointCloud::Ptr cloud_tgt_o) {icp.setMaximumIterations(50);// 两次变化矩阵之间的差值icp.setTransformationEpsilon(1e-10);// 均方误差icp.setEuclideanFitnessEpsilon(0.01);icp.setInputSource(cloud_src_o);//录入source点云icp.setInputTarget(cloud_tgt_o);//录入target点云icp.align(final_cloud);//最终配准结果return icp; } int main(int argc, char** argv) {//加载点云文件PointCloud::Ptr cloud_src_o(new pcl::PointCloudpcl::PointXYZ);//原点云待配准pcl::io::loadPLYFile(ply/bun_zipper.ply, *cloud_src_o);PointCloud::Ptr cloud_tgt_o(new pcl::PointCloudpcl::PointXYZ);//目标点云pcl::io::loadPLYFile(ply/bun_zipper2.ply, *cloud_tgt_o);clock_t start clock();//下采样pcl::VoxelGridpcl::PointXYZ::Ptr voxel_grid(new pcl::VoxelGridpcl::PointXYZ);downsampling(cloud_src_o, cloud_tgt_o, voxel_grid);创建一个NormalEstimationOMP对象,进行法线计算NormalEstimation ne;Normal::Ptr src_normals(new pcl::PointCloudpcl::Normal);Normal::Ptr tgt_normals(new pcl::PointCloudpcl::Normal);KdTreeT::Ptr tree(new pcl::search::KdTreepcl::PointXYZ());normalestimation(ne, src_normals, tgt_normals, tree, cloud_src_o, cloud_tgt_o);//计算FPFH特征/*FPFHEstimation fpfh;FPFH::Ptr src_fpfhs(new pcl::PointCloudpcl::FPFHSignature33());FPFH::Ptr tgt_fpfhs(new pcl::PointCloudpcl::FPFHSignature33());fpfh_features(fpfh, src_fpfhs, tgt_fpfhs, cloud_src_o, cloud_tgt_o, tree, src_normals, tgt_normals);*/// 点云配准PointCloud::Ptr icp_result(new pcl::PointCloudpcl::PointXYZ);PointCloud final_cloud;ICP icp;ICP reg_p icp_registration(icp, final_cloud, cloud_src_o, cloud_tgt_o);/*NDT ndt;NDT reg_p ndt_registration(ndt, final_cloud, cloud_src_o, cloud_tgt_o);*//*GICP gicp;GICP reg_p gicp_registration(gicp, final_cloud, cloud_src_o, cloud_tgt_o);*///SAC_IA sac_ia;//SAC_IA reg_p sacia_registration(sac_ia, final_cloud, cloud_src_o, cloud_tgt_o, src_fpfhs, tgt_fpfhs);clock_t end clock();cout total time: (double)(end - start) / (double)CLOCKS_PER_SEC s endl;//输出配准所用时间cout ICP has converged: reg_p.hasConverged() score: reg_p.getFitnessScore() std::endl;Eigen::Matrix4f reg_p_trans;// 变换矩阵reg_p_trans reg_p.getFinalTransformation();// 平移向量Eigen::Vector3f translation reg_p_trans.block3, 1(0, 3);// 旋转矩阵Eigen::Matrix3f rotation reg_p_trans.block3, 3(0, 0);// 转换为四元数Eigen::Quaternionf quaternion(rotation);// 使用四元数重新计算欧拉角Eigen::Vector3f euler_angles_rad quaternion.toRotationMatrix().eulerAngles(2, 1, 0);获取欧拉角弧度//Eigen::Vector3f euler_angles_rad rotation.eulerAngles(0, 1, 2);// 将弧度转换为角度Eigen::Vector3f euler_angles_deg euler_angles_rad * 180.0 / M_PI;printinfo(reg_p_trans, rotation, translation, euler_angles_deg, quaternion);//使用创建的变换对未过滤的输入点云进行变换pcl::transformPointCloud(*cloud_src_o, *icp_result, reg_p_trans);visualize_pcd(cloud_src_o, cloud_tgt_o, icp_result);return (0); }这里面有四种点云配准方法ICPNDTGICPSAC-IA其中使用SAC-IA的时候要把fpfh计算的代码解开注释其他算法使用的时候不需要解开fpfh计算的代码提醒下fpfh和SAC-IA计算较为缓慢出结果需要四五分钟 这份配准所需点云文件链接 链接https://pan.baidu.com/s/1QduGSfYcMN2MLRa08e0eSg  提取码wstc  六、保存配置 为了在以后新建项目时不重复进行第三部分的配置可以保存属性表点击visual studio2022的视图下的其他窗口找到属性管理器点击 下方会出现属性管理器的字样点击 然后右键Debug | x64点击添加新项目属性表 随便命个名点击添加我命名为PCL.props 这里就会出现PCL的属性表双击之后重复第三部分的配置即可这个属性表会保存在和你的cpp文件的同级目录下 然后你就可以新建一个项目在新项目中也找到Debug | x64右键添加现有属性表找到我们刚才配置的PCL.props就可以导入我们刚才的配置了 六、未来如果你要用PCL做某些大型项目可能会遇到 fatal error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译这种问题解决方法 打开该项目的“属性页”对话框单击“C/C”项单击“命令行”属性页在“附加选项”框中键入编译器选项,添加 /bigobj再次编译即可。 在 Visual Studio 中使用 /bigobj 编译选项的主要好处是允许生成更大的对象文件。这是通过扩展 COFFCommon Object File Format的限制来实现的。以下是 /bigobj 选项的一些具体好处 增加节的数量限制 正常情况下COFF 格式的对象文件有限制例如节的数量不能超过 2^16-165535。使用 /bigobj 可以将这个限制提高到 2^32-1约 4.29 亿这对于包含大量代码的大型项目非常有用。 提供更多的符号 对于有大量符号例如函数、变量、模板实例化的代码/bigobj 也提供了更多的符号支持。 处理复杂的模板 使用大量模板特化和模板元编程的 C 代码可能会生成非常大的对象文件。/bigobj 让编译器能够处理这些复杂的模板情况。 适用于大型项目 对于非常大的项目尤其是那些有大量源代码文件或者是由多个库组合而成的项目使用 /bigobj 选项可以避免在编译过程中出现对象文件格式限制的错误。 使用 /bigobj 选项没有显著的缺点除了可能会增加编译后的对象文件大小。然而它确实是解决某些大型或复杂项目导致的对象文件格式限制问题的必要手段。如果你的项目没有遇到相关的编译限制问题那么通常不需要使用这个选项。 PCL使用SAC-IA \ICP\NDT\GICP进行点云配准-CSDN博客
http://www.w-s-a.com/news/196030/

相关文章:

  • 咸宁网站建设wordpress手动降级
  • 昆明做网站建设怎么样做网站赚钱全攻略
  • 企业网站建设实战教程微信如何注册小程序
  • 做一件代发网站百度seo服务
  • 小说网站开发 公司可以做行程的网站
  • 古交市网站建设公司apk连接wordpress
  • 网页 网 址网站区别wordpress菜单居右
  • 网站建设搭建运营一台云服务器做多个网站
  • 用php做网站用什么框架推广网站推荐
  • 如何用二级域名做网站多用户网上商城
  • 河南省建设科技网站浅谈电子商务网站建设与规划
  • 网站空间需要续费青海网站建设推广
  • 网站开发本地环境企业网站建设排名口碑
  • 做新闻的网站怎样赚钱个人网站课程设计报告
  • 网站设计样例那个网站做图片好看
  • 小型公司网站建设深圳网络营销策划有限公司
  • 国内优秀企业网站做视频网站用什么系统
  • 网站建设入门pdfwordpress网站标题
  • 专业网站的定义网站运营的概念
  • 外贸服装网站建设网页美工设计说明书
  • 郑州专业做网站公百度翻译api wordpress
  • 做网站哪里找大学的一级或二级域名
  • 没有静态ip可以做网站服务器上饶网站制作需要多少钱
  • 网站建设wangzhii做国外网站做什么内容
  • 网站建设 搞笑笑话经典 wordpress主题下载
  • 做网站要懂哪些wordpress 站点网络
  • 郑州外贸网站建设公司排名网站设计做啥好
  • 网站开发合同付款比例wordpress调用指定文章内容
  • 湖北平台网站建设哪里好辽宁建设工程信息网官网平台
  • 公司优化是什么意思?洛阳seo博客