PCL与MFC的搭建(VS2013+1.8.0PCL)超详细!!!

最近需要使用到点云数据处理,因此需要安装PCL点云库,之前折腾了很久很久,因考试等各种原因的耽搁等等,很久都没有配置成功,只在VS2017上配置了1.9.1PCL,可以创建控制台应用程序,但是我想要配置MFC就一直报错,后来,也就有了这篇记录,换成了VS2013+1.8.0PCL,经过一番捣鼓,终于完成了配置。以下为环境配置记录(我将把属性表上传到CSDN下载中,可以下载CSDN下载,1个积分,如果没有积分的小伙伴,也可以添加我的QQ1604737936,我直接发给你)。
前期准备工作:
参考文献:https://blog.csdn.net/qq_42570058/article/details/80891372
安装VS2013,安装1.8.0PCL。具体安装步骤按照参考文献来。
VS2013链接:https://pan.baidu.com/s/1aEY8IlcCS5mzkLfE2g7CKg
提取码:zye8
1.8.0 PCL链接:https://pan.baidu.com/s/13rShx4sonLv7bKZ8nFD9CQ
提取码:of7l
《点云库从入门到精通》书籍源代码链接:
https://pan.baidu.com/s/1EaWG73Cl2ITZX20vwPljBw
提取码:b929

(1) 新建一个MFC对话框项目,修改配置管理器为x64
在这里插入图片描述在这里插入图片描述
(2) 修改属性
点击属性管理器,找到Debug|x64右击它,新建一个属性文件,命名为pcl_mfc_PropertySheet.props;双击pcl_mfc_PropertySheet.props进入修改属性的页面。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
点击C/C++下的常规,点击右边界面的附加包含目录,点开向下的箭头。
在这里插入图片描述
依次按顺序添加以下PCL的安装路径(笔者的PCL安装在D盘下,读者需要将次路径换成自己的安装路径):
D:\PCL 1.8.0\include\pcl-1.8
D:\PCL 1.8.0\3rdParty\Boost\include\boost-1_59
D:\PCL 1.8.0\3rdParty\Eigen\eigen3
D:\PCL 1.8.0\3rdParty\FLANN\include
D:\PCL 1.8.0\3rdParty\OpenNI2\Include
D:\PCL 1.8.0\3rdParty\Qhull\include
D:\PCL 1.8.0\3rdParty\VTK\include\vtk-7.0
成功后,如下图所示:
在这里插入图片描述
点击链接器下的常规,点击右界面的附加库目录,点击右边的框,进行附加库目录的添加。
在这里插入图片描述
以此按照顺序添加以下路径(同样,读者需要将路径换成自己的路径):
D:\PCL 1.8.0\lib
D:\PCL 1.8.0\3rdParty\Boost\lib
D:\PCL 1.8.0\3rdParty\FLANN\lib
D:\PCL 1.8.0\3rdParty\OpenNI2\Lib
D:\PCL 1.8.0\3rdParty\Qhull\lib
D:\PCL 1.8.0\3rdParty\VTK\lib
在这里插入图片描述

点击链接器下的输入,点击右界面的附加依赖项,开始进行附加依赖项的添加。不同版本的PCL的附加依赖项是不同的,所以一定要使用自己这个版本的附加依赖项,可以使用一个cmd命令,将附加依赖项导出,以便直接copy到此处。
以下便是方法,找到cmd打开。
先找到PCL下VTK的lib的安装路径,拷贝下来。
在这里插入图片描述
打开cmd,输入以下如图所示的语句:
在这里插入图片描述

cd /d D:\PCL 1.8.0\3rdParty\VTK\lib
dir /b *.lib*>0.txt

记住,语句中的空格不可以缺少
如下图所示,0.txt文档即已经包含了全部的附加依赖项。

在这里插入图片描述在这里插入图片描述

将0.txt里的内容拷贝到附加依赖项下,如下图所示:
在这里插入图片描述

(实际上我运行的时候出现了配置问题,但有时候又是可以使用的,最真实的建议,还是拷贝我拷贝的内容吧)
以下是我拷贝的内容:

pcl_apps_debug.lib
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_debug.lib
pcl_io_ply_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_ml_debug.lib
pcl_octree_debug.lib
pcl_outofcore_debug.lib
pcl_people_debug.lib
pcl_recognition_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_simulation_debug.lib
pcl_stereo_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib
libboost_atomic-vc120-mt-gd-1_59.lib
libboost_chrono-vc120-mt-gd-1_59.lib
libboost_container-vc120-mt-gd-1_59.lib
libboost_context-vc120-mt-gd-1_59.lib
libboost_coroutine-vc120-mt-gd-1_59.lib
libboost_date_time-vc120-mt-gd-1_59.lib
libboost_exception-vc120-mt-gd-1_59.lib
libboost_filesystem-vc120-mt-gd-1_59.lib
libboost_graph-vc120-mt-gd-1_59.lib
libboost_iostreams-vc120-mt-gd-1_59.lib
libboost_locale-vc120-mt-gd-1_59.lib
libboost_log-vc120-mt-gd-1_59.lib
libboost_log_setup-vc120-mt-gd-1_59.lib
libboost_math_c99-vc120-mt-gd-1_59.lib
libboost_math_c99f-vc120-mt-gd-1_59.lib
libboost_math_c99l-vc120-mt-gd-1_59.lib
libboost_math_tr1-vc120-mt-gd-1_59.lib
libboost_math_tr1f-vc120-mt-gd-1_59.lib
libboost_math_tr1l-vc120-mt-gd-1_59.lib
libboost_mpi-vc120-mt-gd-1_59.lib
libboost_prg_exec_monitor-vc120-mt-gd-1_59.lib
libboost_program_options-vc120-mt-gd-1_59.lib
libboost_random-vc120-mt-gd-1_59.lib
libboost_regex-vc120-mt-gd-1_59.lib
libboost_serialization-vc120-mt-gd-1_59.lib
libboost_signals-vc120-mt-gd-1_59.lib
libboost_system-vc120-mt-gd-1_59.lib
libboost_test_exec_monitor-vc120-mt-gd-1_59.lib
libboost_thread-vc120-mt-gd-1_59.lib
libboost_timer-vc120-mt-gd-1_59.lib
libboost_unit_test_framework-vc120-mt-gd-1_59.lib
libboost_wave-vc120-mt-gd-1_59.lib
libboost_wserialization-vc120-mt-gd-1_59.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
flann-gd.lib
OpenNI2.lib
qhullstatic_r-gd.lib
qhull_p-gd.lib
qhull_r-gd.lib
qhullcpp-gd.lib
qhull-gd.lib
qhullstatic-gd.lib
vtkalglib-7.0-gd.lib
vtkChartsCore-7.0-gd.lib
vtkCommonColor-7.0-gd.lib
vtkCommonComputationalGeometry-7.0-gd.lib
vtkCommonCore-7.0-gd.lib
vtkCommonDataModel-7.0-gd.lib
vtkCommonExecutionModel-7.0-gd.lib
vtkCommonMath-7.0-gd.lib
vtkCommonMisc-7.0-gd.lib
vtkCommonSystem-7.0-gd.lib
vtkCommonTransforms-7.0-gd.lib
vtkDICOMParser-7.0-gd.lib
vtkDomainsChemistry-7.0-gd.lib
vtkDomainsChemistryOpenGL2-7.0-gd.lib
vtkexoIIc-7.0-gd.lib
vtkexpat-7.0-gd.lib
vtkFiltersAMR-7.0-gd.lib
vtkFiltersCore-7.0-gd.lib
vtkFiltersExtraction-7.0-gd.lib
vtkFiltersFlowPaths-7.0-gd.lib
vtkFiltersGeneral-7.0-gd.lib
vtkFiltersGeneric-7.0-gd.lib
vtkFiltersGeometry-7.0-gd.lib
vtkFiltersHybrid-7.0-gd.lib
vtkFiltersHyperTree-7.0-gd.lib
vtkFiltersImaging-7.0-gd.lib
vtkFiltersModeling-7.0-gd.lib
vtkFiltersParallel-7.0-gd.lib
vtkFiltersParallelImaging-7.0-gd.lib
vtkFiltersProgrammable-7.0-gd.lib
vtkFiltersSelection-7.0-gd.lib
vtkFiltersSMP-7.0-gd.lib
vtkFiltersSources-7.0-gd.lib
vtkFiltersStatistics-7.0-gd.lib
vtkFiltersTexture-7.0-gd.lib
vtkFiltersVerdict-7.0-gd.lib
vtkfreetype-7.0-gd.lib
vtkGeovisCore-7.0-gd.lib
vtkglew-7.0-gd.lib
vtkGUISupportQt-7.0-gd.lib
vtkGUISupportQtSQL-7.0-gd.lib
vtkhdf5-7.0-gd.lib
vtkhdf5_hl-7.0-gd.lib
vtkImagingColor-7.0-gd.lib
vtkImagingCore-7.0-gd.lib
vtkImagingFourier-7.0-gd.lib
vtkImagingGeneral-7.0-gd.lib
vtkImagingHybrid-7.0-gd.lib
vtkImagingMath-7.0-gd.lib
vtkImagingMorphological-7.0-gd.lib
vtkImagingSources-7.0-gd.lib
vtkImagingStatistics-7.0-gd.lib
vtkImagingStencil-7.0-gd.lib
vtkInfovisCore-7.0-gd.lib
vtkInfovisLayout-7.0-gd.lib
vtkInteractionImage-7.0-gd.lib
vtkInteractionStyle-7.0-gd.lib
vtkInteractionWidgets-7.0-gd.lib
vtkIOAMR-7.0-gd.lib
vtkIOCore-7.0-gd.lib
vtkIOEnSight-7.0-gd.lib
vtkIOExodus-7.0-gd.lib
vtkIOExport-7.0-gd.lib
vtkIOGeometry-7.0-gd.lib
vtkIOImage-7.0-gd.lib
vtkIOImport-7.0-gd.lib
vtkIOInfovis-7.0-gd.lib
vtkIOLegacy-7.0-gd.lib
vtkIOLSDyna-7.0-gd.lib
vtkIOMINC-7.0-gd.lib
vtkIOMovie-7.0-gd.lib
vtkIONetCDF-7.0-gd.lib
vtkIOParallel-7.0-gd.lib
vtkIOParallelXML-7.0-gd.lib
vtkIOPLY-7.0-gd.lib
vtkIOSQL-7.0-gd.lib
vtkIOVideo-7.0-gd.lib
vtkIOXML-7.0-gd.lib
vtkIOXMLParser-7.0-gd.lib
vtkjpeg-7.0-gd.lib
vtkjsoncpp-7.0-gd.lib
vtklibxml2-7.0-gd.lib
vtkmetaio-7.0-gd.lib
vtkNetCDF-7.0-gd.lib
vtkNetCDF_cxx-7.0-gd.lib
vtkoggtheora-7.0-gd.lib
vtkParallelCore-7.0-gd.lib
vtkpng-7.0-gd.lib
vtkproj4-7.0-gd.lib
vtkRenderingAnnotation-7.0-gd.lib
vtkRenderingContext2D-7.0-gd.lib
vtkRenderingContextOpenGL2-7.0-gd.lib
vtkRenderingCore-7.0-gd.lib
vtkRenderingFreeType-7.0-gd.lib
vtkRenderingImage-7.0-gd.lib
vtkRenderingLabel-7.0-gd.lib
vtkRenderingLOD-7.0-gd.lib
vtkRenderingOpenGL2-7.0-gd.lib
vtkRenderingQt-7.0-gd.lib
vtkRenderingVolume-7.0-gd.lib
vtkRenderingVolumeOpenGL2-7.0-gd.lib
vtksqlite-7.0-gd.lib
vtksys-7.0-gd.lib
vtktiff-7.0-gd.lib
vtkverdict-7.0-gd.lib
vtkViewsContext2D-7.0-gd.lib
vtkViewsCore-7.0-gd.lib
vtkViewsInfovis-7.0-gd.lib
vtkViewsQt-7.0-gd.lib
vtkzlib-7.0-gd.lib

另外,为了不报C4996的错误,需要在C/C++下的预处理器加上_SCL_SECURE_NO_WARNINGS
完成以上步骤,配置基本完成了。
我们加入一些简单的测试代码测试一下,环境是否搭建成功。

(3) 创建界面,并以IDC_PCDVIEW、IDC_OPEN、IDC_CLOSE分别命名Picture控件和打开、关闭控件。

(4) 修改代码
在cpp中修改新增加

#undef min 										//新加代码//
#undef max 	
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
//将原来的这三行代码注释掉
//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif
//新增加
using namespace pcl;
int user_data;
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
	viewer.setBackgroundColor(1.0, 0.5, 1.0);
	pcl::PointXYZ o;
	o.x = 1.0;
	o.y = 0;
	o.z = 0;
	viewer.addSphere(o, 0.25, "sphere", 0);
	std::cout << "i only run once" << std::endl;

}

void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
	static unsigned count = 0;
	std::stringstream ss;
	ss << "Once per viewer loop: " << count++;
	viewer.removeShape("text", 0);
	viewer.addText(ss.str(), 200, 300, "text", 0);
	//FIXME: possible race condition here:
	user_data++;}

回到Dlg界面,双击打开按钮,进入打开按钮代码的编写,输入以下代码

pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
	pcl::io::loadPCDFile("rabbit.pcd", *cloud);
	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	//showCloud函数是同步的,在此处等待直到渲染显示为止
	viewer.showCloud(cloud);
	//该注册函数在可视化时只调用一次
	viewer.runOnVisualizationThreadOnce(viewerOneOff);
	//该注册函数在渲染输出时每次都调用
	viewer.runOnVisualizationThread(viewerPsycho);
	while (!viewer.wasStopped())
	{
		//在此处可以添加其他处理
		user_data++;
	}
	UpdateData(FALSE); //由cloud_viewer中的return 0; 改为UpdateData(FALSE);

(5) 调试
如果出现以下界面的话,则为环境搭建成功。环境搭建成功才踏出了一小步,接下来的工程创建,还有很长的路要走,兄弟加油

在这里插入图片描述

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页