PCL学习笔记:PCL的初次安装和使用。

2023-10-27

(注:资料来源:D:\项目资料_YC\激光扫描建模_长沙项目_2016→2019\2017&2018_文档资料_技术总结YC\201703→_YC_激光建模技术总结_201703及以后.docx)

 

目录

A.PCL的初步安装及测试

0、安装平台

1、VS2010的安装

2、PCL的安装

3、Cmake的安装

4、环境变量path的配置

5、采用Cmake生成测试工程

5.1 在Visual Studio2010中,新建一个.cpp文件

5.2 建立CmakeLists.txt文档

5.3建立文件夹

5.4打开Cmake软件创建工程

6、用VS2010打开工程并初步编译

7、QT安装

8、测试工程的再次编译和运行

9、附录:相关网址

B.不借助Cmake而在VS2010中调用PCL

1、在visual studio2010中新建工程

2、添加代码

3、配置目录

5、各种报错解决方案

报错1:error C2059: 语法错误:“::” error C2589: “(”:“::”右边的非法标记

报错2:32位PCL应在Debug 32模式下进行编译;64位PCL应在Debug x64模式下进行编译。否则会报错。

报错3:error C2661: “pcl::PointCloud::operator new”: 没有重载函数接受 3 个参数

报错4:“找不到标识符”

报错5:“result”: 符号既不是类 模板 也不是函数 模板

报错6:vs2010+pcl遇到的无法解析的外部命令

C.PCL学习网址链接

 

A.PCL的初步安装及测试

本节是对开源点云库PCL的安装、调试过程的总结,内容涵盖以下方面:①安装:VS2010的安装、PCL的安装、Cmake的安装;②配置:环境变量path的配置、Cmake的应用、VS2010的配置;③测试:新建一个工程,测试PCL的安装是否成功。

0、安装平台

本次安装的平台如下:

操作系统:Win7 64位操作系统

编程环境:Visual Studio 2010

PCL版本:1.6.0

1VS2010的安装

安装包:移动硬盘里有备份(20170528)。安装包如下图所示:

安装步骤:

安装过程中可能会出现的报错:

对此问题可参考以下网址:

网址1:http://jingyan.baidu.com/article/64d05a0278f40dde55f73bf0.html

网址2:http://www.yishimei.cn/network/385.html

另,为以防万一,安装VS2010是最好关闭杀毒软件。

Visual Studio2010具体安装步骤可参考以下网址:http://jingyan.baidu.com/article/a65957f49714ad24e77f9b69.html

2PCL的安装

备注:如果以前安装过pcl,想再安装其他版本的pcl,则可以直接安装,无需卸载之前的版本。只要路径不同就行。然后把VS里pcl相关的配置内容清除,同时也别忘了更改环境变量path中的配置。

备注:本次安装测试笔者安装的是PCL1.6.0、64位。在后续的项目使用中由于实际需求,换成了PCL1.6.0、32位的了。

PCL1.6.0、64位的安装包:移动硬盘里有备份(20170528)。安装包如下图所示:(网页下载路径:http://pointclouds.org/downloads/windows.html

安装步骤:

双击以下应用程序:

在安装的过程中,安装位置(路径)可以自定义,其余的均默认。

【注意:安装路径不要过长,否则后续程序编译会出错。】

安装过程中会跳出如下安装提示框,直接点击Install即可。

之后跳出如下界面,点击Finish

之后跳出如下界面,直接点击Install

之后跳出如下界面,点击Finish

之后点击“完成”

安装完毕之后,在PCL 1.6.0的安装文件夹里,会有如下文件:

将PCL安装包中下图所示的压缩包解压,

将文件夹中的.pdb文件全部复制到PCL 1.6.0的安装文件夹的bin文件夹里。(笔者的路径:D:\PCL 1.6.0\anzhaungwenjianjia\PCL 1.6.0\bin)如下图所示:

至此已完成PCL 1.6.0的安装。

3Cmake的安装

安装包:移动硬盘里有备份(20170528)。安装包如下图所示:

安装步骤:

点击Next

点击Next

点击Next

选择安装路径,之后点击Next

点击Install

点击Finish

4、环境变量path的配置

计算机右键,属性→选择左上方的 高级系统设置→跳出如下图所示的界面:

点击右下方的环境变量按钮,跳出如下图所示的界面:

在下面的“系统变量(S)”框里选择Path,点击“编辑”按钮,

弹出编辑系统变量界面:

在该界面中,对“变量值”进行修改,为方便起见,建议将“变量值”全部复制到txt文档中进行修改,修改完之后再粘回去。

修改注意事项:①英文下输入;②路径之间用英文分号隔开;③最后一个路径之后不加分号;④添加完Path之后,有可能在重启电脑之后才生效。

在现有的“变量值”后面添加:(注意:要根据自己的实际安装路径确定添加的内容,不能直接复制下面的内容)

;D:\Cmake-3.8.1\anzhuangwenjianjia\bin;D:\PCL 1.6.0\bin;D:\PCL 1.6.0\3rdParty\FLANN\bin;D:\PCL 1.6.0\3rdParty\VTK\bin;D:\PCL 1.6.0\3rdParty\Qhull\bin

5、采用Cmake生成测试工程

5.1 Visual Studio2010中,新建一个.cpp文件

(关于visual studio MFC的最基本使用,可参考以下教材:http://www.jizhuomi.com/software/257.html#cmt12136

编辑一段简单的代码cloud_viewer_PointXYZ.cpp,将其在新建的工程中粘贴过去,保存。

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
intuser_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::stringstreamss;
	ss<< "Once per viewer loop: " << count++;
	viewer.removeShape ("text", 0);
	viewer.addText (ss.str(), 200, 300, "text", 0);//test窗口的位置
	//FIXME: possible race condition here:
	user_data++;
}
int main ()
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); //modified

	//blocks until the cloud is actually rendered
	if(pcl::io::loadPCDFile<pcl::PointXYZ>("my_point_cloud.pcd",*cloud)==-1)//*打开含有点云图案的pcd文件
	{ 
		PCL_ERROR("Couldn't read file my_point_cloud.pcd\n"); 
		return(-1);
	} 
	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	viewer.showCloud(cloud);//显示点云
	//use the following functions to get access to the underlying more advanced/powerful
	//PCLVisualizer

	//This will only get called once
	viewer.runOnVisualizationThreadOnce (viewerOneOff);
	//This will get called once per visualization iteration
	viewer.runOnVisualizationThread (viewerPsycho);
	while (!viewer.wasStopped ())
	{
		//you can also do cool processing here
		//FIXME: Note that this is running in a separate thread from viewerPsycho
		//and you should guard against race conditions yourself...
		user_data++;
	}
	system("pause");
	return 0;
}

5.2 建立CmakeLists.txt文档

建立CmakeLists.txt文档,源代码(也即该.txt文档的内容)如下:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(cloud_viewer_PointXYZ)

find_package(PCL 1.6 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable (cloud_viewer_PointXYZ cloud_viewer_PointXYZ.cpp)
target_link_libraries (cloud_viewer_PointXYZ ${PCL_LIBRARIES})

再谈谈我对这段代码的理解:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)这是对cmake的最低版本要求,由于编程简单,不需要2.8或者更高的版本;

project(cloud_viewer_PointXYZ)这是cpp文件的工程名;

find_package(PCL 1.6 REQUIRED)这是对PCL的版本要求;


include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
这几句是利用Cmake的宏完成对pcl的头文件路径和链接路径变量的配置和添加,若没有这几句,.cpp文件的头文件则会出现报错

add_executable (cloud_viewer_PointXYZ cloud_viewer_PointXYZ.cpp)这句是告诉我们,将把&&.cpp文件装换成另一个名为cloud_viewer_PointXYZ的可执行文件,当然,可以任意取名;

target_link_libraries (cloud_viewer_PointXYZ ${PCL_LIBRARIES})这句是将新生成的可执行文件链接到PCL库;

5.3建立文件夹

创建名为test-project的文件夹,在该文件夹里创建2个文件夹,名字分别为cmake-binsource,如下图所示:

之后,将刚才所建立的CmakeLists.txt文档和cloud_viewer_PointXYZ.cpp文档复制到source文件夹内。

5.4打开Cmake软件创建工程

将前面所建立的2个文件夹路径设置在Cmake界面内:

之后,点击左下角的Configure,在弹出的对话框中做如下选择:

之后点击Finish,Cmake界面变成如下:

此时,界面最下方的框框里不应有红色的报错信息。点击Generate按钮:

注意最下方的框框里会显示出“Generating done”。

至此,Cmake创建工程环节已经完成,新生成的工程在cmake-bin文件夹内

6、用VS2010打开工程并初步编译

打开VS2010,点击“文件→打开→项目/解决方案”,将cmake-bin文件夹内的工程打开:

cloud_viewer_PointXYZ工程设为启动项目:

按下F7编译工程,出现如下报错:

→这是因为我们C盘内没有相关的文件,所以需要下载安装相关的Qt文件。

7QT安装

安装包:移动硬盘里有备份(20170528)。安装包如下图所示:

安装步骤:

双击安装包qt-win-opensource-4.8.0-vs2010,之后一路点击Next:

→安装路径选择默认。

→点击Install,安装完毕即可。

8、测试工程的再次编译和运行

在安装完QT之后,再次在VS2010中按下F7,编译工程,此次无error产生。

在VS界面下按下Ctrl+Alt+F5,得到如下图所示的运行结果。

该结果说明没找到点云数据文件“my_point_cloud.pcd”。将该文件复制粘贴到test-project\camke-bin文件夹中,如下图所示:

(my_point_cloud.pcd文件已在移动硬盘中备份,位于移动硬盘的根目录下,如下图所示。20170528YC)

再次运行程序,运行结果如下:

至此,完成了PCL的初步安装和调试。

9、附录:相关网址

①、Qt下载地址

http://blog.csdn.net/friendan/article/details/44873347

②、PCL特征点与配准(1)

http://www.cnblogs.com/li-yao7758258/p/6612856.html

③、PCL学习笔记(1):pcl1.6.0+vs2010环境配置以及第1个pcl程序

http://blog.csdn.net/chentravelling/article/details/43451589

④、PCL1.7.2 简单安装教程

http://www.zhangzscn.com/2015/10/31/x64vs2013pcl1-7-2-简单安装教程/

⑤、解决 vs2010问题:error MSB8008: 指定的平台工具集(v110)未安装或无效

http://blog.csdn.net/liuqiyao_01/article/details/38656873

⑥、问题:>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

http://www.cnblogs.com/newpanderking/articles/3372969.html

http://jingyan.baidu.com/article/fc07f9891c556412ffe519fa.html

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

B.不借助Cmake而在VS2010中调用PCL

本节中,记录了不使用Cmake而调用PCL的方法。和借助于Cmake生成一个工程相比,该方法更适合在已有工程上添加移植和PCL相关的代码。编译环境:visual studio2010、windows7操作系统。

参考了以下网址的内容:http://blog.csdn.net/bactone_li/article/details/26378325

本次总结是基于上述网址内容的细化和优化。因此也可以不看该参考网址。

1、visual studio2010中新建工程

首先打开VS2010,新建一个VC++项目(win32控制台应用程序),工程名称:project_inliers。

文件→新建→项目,选择工程位置,“名称”处输入project_inliers:

之后点击“确定”,在随后弹出来的对话框里直接点击“完成”:

2、添加代码

将新建的工程中的project_inliers.cpp的代码替换成下面的代码:

代码1

#include "stdafx.h" //※(这一句很重要!)
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/project_inliers.h>

int
 main (int argc, char** argv)
{
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected (new pcl::PointCloud<pcl::PointXYZ>);

  // Fill in the cloud data
  cloud->width  = 5;
  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 * rand () / (RAND_MAX + 1.0f);
    cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
    cloud->points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
  }

  std::cerr << "Cloud before projection: " << std::endl;
  for (size_t i = 0; i < cloud->points.size (); ++i)
    std::cerr << "    " << cloud->points[i].x << " " 
                        << cloud->points[i].y << " " 
                        << cloud->points[i].z << std::endl;

  // Create a set of planar coefficients with X=Y=0,Z=1
  pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
  coefficients->values.resize (4);
  coefficients->values[0] = coefficients->values[1] = 0;
  coefficients->values[2] = 1.0;
  coefficients->values[3] = 0;

  // Create the filtering object
  pcl::ProjectInliers<pcl::PointXYZ> proj;
  proj.setModelType (pcl::SACMODEL_PLANE);
  proj.setInputCloud (cloud);
  proj.setModelCoefficients (coefficients);
  proj.filter (*cloud_projected);

  std::cerr << "Cloud after projection: " << std::endl;
  for (size_t i = 0; i < cloud_projected->points.size (); ++i)
    std::cerr << "    " << cloud_projected->points[i].x << " " 
                        << cloud_projected->points[i].y << " " 
                        << cloud_projected->points[i].z << std::endl;
  return (0);
}

代码2

#include "stdafx.h" //※(这一句很重要!)
#include <iostream>
#include <boost/thread/thread.hpp>
#include <pcl/common/common_headers.h>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>

//可视化点云颜色特征。
boost::shared_ptr<pcl::visualization::PCLVisualizer> rgbVis (pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud)
{
/* 创建视窗对象,并给标题栏定义一个名称"3D Viewer",我们将它定义为boost::shared_ptr智能共享指针,
  这样可以保证该指针在整个程序全局使用,而不引起内存错误,通常情况下,用户不需要这样做。*/ 
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  //视窗的背景色可以设为用户喜欢的任意RGB颜色,本例中,我们将它设置为黑色。
  viewer->setBackgroundColor (0, 0, 0);

  pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
/*这是最重要的一行,我们将点云添加到视窗对象中,并定义一个唯一的字符串作为ID号,利用此字符串保证在其他成员方法中
也能标识引用该点云,多次调用addPointCloud(),可以实现多个点云的添加,每调用一次就创建一个新的ID号,
如果想更新一个已经显示的点云,用户必须先调用removePointCloud(),并提供需要更新的点云的ID号。*/
  viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "sample cloud");
//改变现实点云的尺寸  
  viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
//显示坐标系统的方向。  
  viewer->addCoordinateSystem (1.0);
//默认角度和方向。  
  viewer->initCameraParameters ();
  return (viewer);
}

int // -----Main-----
main (int argc, char** argv)
{
  // 自行创建一随机点云
  pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>);
  pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
//  std::cout << "Genarating example point clouds.\n\n";
  // 以椭圆为边线沿z轴拉伸获取其点云,并赋予红绿蓝渐变色。
  int r(255), g(15), b(15);
  
      pcl::PointXYZ basic_point;
	  basic_point.x = 0; //
      basic_point.y = 0; //
      basic_point.z = 0; //
/*
  for (float z(-1.0); z <= 1.0; z += 0.05)
  {
      //pcl::PointXYZ basic_point;
      basic_point.x += 1; //
      basic_point.y += 1; //
      basic_point.z += 1; //
      basic_cloud_ptr->points.push_back(basic_point);

      pcl::PointXYZRGB point;
      point.x = basic_point.x;
      point.y = basic_point.y;
      point.z = basic_point.z;
      uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
              static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
      point.rgb = *reinterpret_cast<float*>(&rgb);
      point_cloud_ptr->points.push_back (point);  
  }
*/

 
  for (float z(-1.0); z <= 1.0; z += 0.05)
  {
    for (float angle(0.0); angle <= 360.0; angle += 5.0)
    {
      pcl::PointXYZ basic_point;
      basic_point.x = 0.5 * cosf (pcl::deg2rad(angle)); //
      basic_point.y = sinf (pcl::deg2rad(angle)); //
      basic_point.z = 1*z; //
      basic_cloud_ptr->points.push_back(basic_point);

      pcl::PointXYZRGB point;
      point.x = basic_point.x;
      point.y = basic_point.y;
      point.z = basic_point.z;
      uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
              static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
      point.rgb = *reinterpret_cast<float*>(&rgb);
      point_cloud_ptr->points.push_back (point);
    }

/*    
	if (z < 0.0)
    {
      r -= 12;
      g += 12;
    }
    else
    {
      g -= 12;
      b += 12;
    }
*/
  }

  basic_cloud_ptr->width = (int) basic_cloud_ptr->points.size ();
  basic_cloud_ptr->height = 1;
  point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
  point_cloud_ptr->height = 1;
  // 0.05为搜索半径获取点云法线
  pcl::NormalEstimation<pcl::PointXYZRGB, pcl::Normal> ne;
  ne.setInputCloud (point_cloud_ptr);
  pcl::search::KdTree<pcl::PointXYZRGB>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZRGB> ());
  ne.setSearchMethod (tree);
  pcl::PointCloud<pcl::Normal>::Ptr cloud_normals1 (new pcl::PointCloud<pcl::Normal>);
  ne.setRadiusSearch (0.05);
  ne.compute (*cloud_normals1);
  //  0.1为搜索半径获取点云法线
  pcl::PointCloud<pcl::Normal>::Ptr cloud_normals2 (new pcl::PointCloud<pcl::Normal>);
  ne.setRadiusSearch (0.1);
  ne.compute (*cloud_normals2);

  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;

  viewer = rgbVis(point_cloud_ptr);

  // 主循环
  while (!viewer->wasStopped ())
  {
    viewer->spinOnce (100);
    boost::this_thread::sleep (boost::posix_time::microseconds (100000));
  }
}

上面2个测试代码中,代码1是用于控制台输出信息;代码2用于显示三维点云数据。可对上面2段代码分别进行测试。

代码添加注意事项:

经测试,在App.h,App.cpp,AppDlg.h,AppDlg.cpp这4个选项中,在App.h文件开头添加include比较合适,也即下面一段代码:

#include "stdafx.h" //※(这一句很重要!)
#include <iostream>
#include <boost/thread/thread.hpp>
#include <pcl/common/common_headers.h>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>

3、配置目录

代码修改完之后,需要在工程属性中进行相关配置,在项目(p)-->project_inliers属性--->在新打开的属性窗口中进行多项配置:

①VC++目录--->包含目录--->添加:

C:\Program Files\PCL 1.6.0\include\pcl-1.6

C:\Program Files\PCL 1.6.0\3rdParty\Boost\include

C:\Program Files\PCL 1.6.0\3rdParty\Eigen\include

C:\Program Files\PCL 1.6.0\3rdParty\FLANN\include

C:\Program Files\PCL 1.6.0\3rdParty\Qhull\include

C:\Program Files\PCL 1.6.0\3rdParty\VTK\include\vtk-5.8

C:\Program Files\OpenNI\Include

当然,为了表示的简单,我们也可以在打开VS2010建立工程项目之前先定义环境变量来简化此处的表达:

计算机-->属性-->高级系统设置-->环境变量-->系统变量-->新建,变量名PCL_ROOT,变量值:C:\Program Files\PCL 1.6.0。那么此时上面的包含路径表示可以改成: (注:上述划去的内容:具体路径因人而异,不能完全照搬!)

$(PCL_ROOT)\include\pcl-1.6

$(PCL_ROOT)\3rdParty\Boost\include

$(PCL_ROOT)\3rdParty\Eigen\include

$(PCL_ROOT)\3rdParty\FLANN\include

$(PCL_ROOT)\3rdParty\Qhull\include

$(PCL_ROOT)\3rdParty\VTK\include\vtk-5.8

C:\Program Files\OpenNI\Include

②VC++目录--->库目录--->添加:

$(PCL_ROOT)\lib

$(PCL_ROOT)\3rdParty\Boost\lib

$(PCL_ROOT)\3rdParty\FLANN\lib

$(PCL_ROOT)\3rdParty\Qhull\lib

$(PCL_ROOT)\3rdParty\VTK\lib\vtk-5.8

C:\Program Files\OpenNI\Lib64

③链接器-->输入-->附加依赖项,添加:

opengl32.lib

pcl_kdtree_debug.lib

pcl_io_debug.lib

pcl_search_debug.lib

pcl_segmentation_debug.lib

pcl_apps_debug.lib

pcl_features_debug.lib

pcl_filters_debug.lib

pcl_visualization_debug.lib

pcl_common_debug.lib

flann_cpp_s-gd.lib

libboost_system-vc100-mt-gd-1_49.lib

libboost_filesystem-vc100-mt-gd-1_49.lib

libboost_thread-vc100-mt-gd-1_49.lib

libboost_date_time-vc100-mt-gd-1_49.lib

libboost_iostreams-vc100-mt-gd-1_49.lib

vtkalglib-gd.lib

vtkCharts-gd.lib

vtkCommon-gd.lib

vtkDICOMParser-gd.lib

vtkexoIIc-gd.lib

vtkexpat-gd.lib

vtkFiltering-gd.lib

vtkfreetype-gd.lib

vtkftgl-gd.lib

vtkGenericFiltering-gd.lib

vtkGeovis-gd.lib

vtkGraphics-gd.lib

vtkhdf5-gd.lib

vtkHybrid-gd.lib

vtkImaging-gd.lib

vtkInfovis-gd.lib

vtkIO-gd.lib

vtkjpeg-gd.lib

vtklibxml2-gd.lib

vtkmetaio-gd.lib

vtkNetCDF-gd.lib

vtkNetCDF_cxx-gd.lib

vtkpng-gd.lib

vtkproj4-gd.lib

vtkRendering-gd.lib

vtksqlite-gd.lib

vtksys-gd.lib

vtktiff-gd.lib

vtkverdict-gd.lib

vtkViews-gd.lib

vtkVolumeRendering-gd.lib

vtkWidgets-gd.lib

vtkzlib-gd.lib

4、运行结果

代码1:

代码2:

至此,调试成功。

5、各种报错解决方案

报错1:error C2059: 语法错误:“::” error C2589: “(”:“::”右边的非法标记

解决方法:

方法1:

http://blog.csdn.net/rs_huangzs/article/details/50954828

方法2:

http://blog.csdn.net/u012943043/article/details/71056476

20170725笔者:经实际测试,“或者在#include pcl头文件之前使用#undef max”(App.h文件中)可以有效解决程序中的报错:

报错2:32位PCL应在Debug 32模式下进行编译;64位PCL应在Debug x64模式下进行编译。否则会报错。

报错3:error C2661: “pcl::PointCloud<PointT>::operator new”: 没有重载函数接受 3 个参数

参考网址:

http://bbs.csdn.net/topics/390930955/

解决方法:

在一个大神帖子里找到了答案。写在这给其他人参考:
MFC在最开头加了这样的预编译,导致PCLnew报错。
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

解决方法:
把这三行注释

楼上说的对,
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

这三句话就在dialogcpp里面,前面

报错4:“找不到标识符”

解决方法:

http://jingyan.baidu.com/article/95c9d20da32b5fec4e7561c3.html

报错5:“result”: 符号既不是类 模板 也不是函数 模板

解决方法:

http://blog.csdn.net/varding/article/details/8506149?utm_source=tuicool

socketbindfunctionbind冲突了...,只需要把调用socketbind(xxxx)改成:::bind(xxxx)即可!!

报错6:vs2010+pcl遇到的无法解析的外部命令

解决方法:

是因为在配置属性-》链接器 中的附加依赖项里面缺少了下面的.lib文件

参考网址:http://blog.csdn.net/lgdnr/article/details/47088769

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

C.PCL学习网址链接

PCL学习资源(中文)网址:

http://www.pclcn.org/

点云视窗类CloudViewer(1)

http://www.pclcn.org/study/shownews.php?lang=cn&id=149

点云视窗类CloudViewer(2)

http://www.pclcn.org/study/shownews.php?lang=cn&id=151

开源库PCL入门指南

http://www.zhangzscn.com/2015/11/16/开源库pcl入门指南/

点云数据收集链接

http://www.pclcn.org/bbs/forum.php?mod=viewthread&tid=38

1.PCD格式数据集合

http://download.csdn.net/detail/xx__hu/8662161

2.PCD格式数据集合

http://download.csdn.net/detail/xx__hu/8662169

PCL学习笔记(4):创建点云文件、加载点云文件

http://blog.csdn.net/chentravelling/article/details/43740459

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCL学习笔记:PCL的初次安装和使用。 的相关文章

  • 【算法研究】Bresenham画线算法

    作者 gnuhpc 出处 http www cnblogs com gnuhpc 0 算法目的这个算法是要画一条平滑的直线 这个工作的难点是确定两点之间的那些像素点 使其近可能的靠近手工绘制的直线 1 基本算法描述现在我们要在一个光栅格子上
  • Django独有报错

    You called this URL via POST but the URL doesn t end in a slash and you have APPEND SLASH set Django can t redirect to t
  • vcruntime140.dll文件下载安装方法以及一些注意事项

    其实vcruntime140 dll文件是Microsoft Visual C Redistributable Packages for Visual Studio 2015中的一个重要组件 它包含了Windows操作系统和其他应用程序所需
  • 加拿大见!拓数派受邀参加第17届PostgreSQL国际开发者大会(PGCon 2023)

    5月30日 6月2日 作为疫情后的第一场线下会议第17届 PostgreSQL 国际开发者大会 PGCon 2023 将在加拿大渥太华隆重举行 拓数派将作为黄金赞助商 受邀参与本次盛会 与全球数据库爱好者们共聚加拿大 此外 拓数派 PieC
  • 由“2013软考之不完美结果”来剖析自己的学习方式误区

    2013年5 25日的软考 昨天晚上可以查成绩了 当时同学走到我面前让查成绩时 心开始跳了 手开始抖了 那一刻的紧张 那一刻的激动 既担心又想知道结果 别急别急 成绩看到了 不高 上午50 下午45 也就是说按百分制算的话 下午只考了60分
  • VScode 安装 ESP-idf 5.0报错:LookupError: unknown encoding: utf-8,gbk

    原因 说明从 pip 源返回的是 utf 8 gbk 编码类型 但是 pip 不能解析 请求了一下 pip 源后发现确实如此 尝试更新 pip python m pip install upgrade pip 但也会报同样的问题 这是因为镜
  • 服务器不能全屏显示,远程服务器如何全屏显示

    远程服务器如何全屏显示 内容精选 换一换 本节操作介绍在Windows和Linux环境中使用SSH密码方式远程登录Linux云服务器的操作步骤 弹性云服务器状态为 运行中 弹性云服务器已经绑定弹性公网IP 绑定方式请参见绑定弹性公网IP 所
  • firemonkey开发通讯录app

    1 添加AddressBook1 MultiView1 speedbuttonX3 labelX editboxX3 buttonX2 listbox组件 2 对listbox右键additem选择tsearchbox类型 3 设置Mult
  • Jlink SWD和Jtag下载失败总结

    学习STM32或者说使用Jlink的同学都有很多的困扰 我把自己遇到的情况总结一下 并给出解决方法 希望后来人少走点弯路 第一次写博客 勿喷 一 提示No Jlink Device Found 错误 没有发现Jlink 可能原因 1 Jli
  • 函数式编程总结

    函数式编程的概念 函数式编程理念来自于数学中的函数 函数的概念 对于两个变量x和y 如果每给定x的一个值 都有一个y值与之对应 那么我们就说y是x的函数 如下即是一些函数 f x 5x 2 4x 3 g x 2f x 5 10x 2 8x
  • cmath常用库函数

    cmath int abs int i double fabs double x long labs long n double exp double x double log double x double pow double x do
  • KVM 性能调优

    CPU Tuning Cache share tuning 对于物理 CPU 同一个 core 的 threads 共享 L2 Cache 同一个 socket 的 cores 共享 L3 cache 所以虚拟机的 vcpu 应当尽可能在同
  • 深度学习日记

    一 基于连续帧排序的语言分割 BubbleNets Learning to Select the Guidance Frame in Video Object Segmentation by Deep Sorting Frames 论文地址
  • cmd命令行如何快速进入当前目录

    我们在cmd命令行中如果想要进入某一个目录 相信大家一般都是先按D 或者E 进入相应的盘符 然后再输入cd 当前目录 以下有两种快捷方式可以进入当前目录 1 部分绿色windows版本可以支持以下操作 按住shift 鼠标右键 即可看见 在
  • 华为机试HJ8 合并表记录

    HJ8 合并表记录 Python 题目 解题思路 代码 结果 题目 解题思路 1 题目中没有说有多组输入 不考虑循环 2 结果列表先初始化 3 键值对的处理简单 合并按位置加和即可 4 要记录出现过的键 最后输出要决定显示哪些键值对 代码
  • STM32学习之SHT20温湿度传感器

    一 产品综述 SHT20 新一代 Sensirion 湿度和温度传感器在尺寸与智能方面建立了新的标准 它嵌入了适于回流焊的双列扁平无引脚 DFN 封装 底面 3 x3mm 高度 1 1mm 传感器输出经过标定的数字信号 标准 I 2 C 格
  • LAMP平台部署及论坛搭建

    部署LAMP平台实验 一 编译安装APACHE 1 准备工作 2 解压到opt目录 3 将解压好的apr文件放到httpd源码文件代码库中 4 配置Apache 5 make编译安装 6 优化httpd服务执行方式需要先优化路径 7 设置系
  • Error: Unable to execute “/usr/bin/vmware-uninstall-tools.pl.终极解决方案

    如何快速安装VMware Tool 可以参考这篇文章 https allen5g blog csdn net article details 102759282 Error Unable to execute usr bin vmware
  • Fiddler使用方法小结

    Fiddler基本使用 简介 Fiddler是一个http协议调试代理工具 它能够记录并检查所有你的电脑和互联网之间的http通讯 设置断点 查看所有的 进出 Fiddler的数据 指cookie html js css等文件 这些都可以让

随机推荐

  • CSS:三个div放在一排

    div 1 div div 2 div div 3 div 方法一 div display inline block 方法二 div float left 方法三 flex布局 123外面加一个div 这个div的style为 displa
  • HttpServletRequestWrapper替代HttpServletRequest

    本文解析以下两个方面 1 HttpServletRequestWrapper的作用 HttpServletRequest采用装饰者模式包装了HttpServletRequest 客户端发送请求后 容器实例化了一个org apache cat
  • 大数据构建数据生态系列02——与研发的爱恨情仇

    1 写在之前 接上一章的架构图 我们知道我们只是起了个头 后续还有待完善的部分 这一章节暂时不讲 我们在上一章成果的基础上 讲述一下整个数据收集的相关故事 以及期间的一些收获和思考 主要是和研发团队之间的 爱情火花 在数据生态的第一环中 最
  • 【编程之路】面试必刷TOP101:动态规划(78-82,Python实现)

    面试必刷TOP101 动态规划 78 82 Python实现 78 打家劫舍 一 小试牛刀 78 1 动态规划 或许有人认为利用贪心思想 偷取最多人家的钱就可以了 要么偶数家要么奇数家全部的钱 但是有时候会为了偷取更多的钱 或许可能会连续放
  • 怎么让小孩子学计算机,小朋友不会电脑怎么学编程?终于真相了!

    孩子太小根本玩不转电脑 鼠标都握不稳 26个英文字母都认不全 学编程简直天方夜谭 在很多家长看来 孩子借助电脑能进行熟练的源代码编程操作才叫学编程 清华前校长陈吉宁先生曾经说过 中国未来社会需要逻辑思维缜密 能够应对变化 提出独特想法的创造
  • Java解一元二次方程和四则运算

    目录 一 Java解一元二次方程 运行结果 思路解析 二 Java四则运算 运行结果 思路解析 一 Java解一元二次方程 package hello import java util Scanner public class hey pu
  • (转载)LOOP WITH CONTROL 用法

    转载自 凡尘clsoho源链接 http www cnblogs com clsoho archive 2010 01 22 1654379 html LOOP WITH CONTROL Syntax 语法 LOOP AT itab INT
  • Unknown Bounded Array

    有两个文件 一个文件是数组的声明 另一个是数组的定义 如果数组的定义发生变化 比如说变成了含有5个元素的数组 那么相关联的声明也必须改变 一旦文件变多则会有部分文件忘记修改 就会发生意想不到的问题 int array 4 1 2 3 4 i
  • Markdown-分数表示(Typora,Latex)

    Markdown 分数表示 Typora Latex 在写算法题解的时候 遇到在markdown中表示分数的情况 遂查询相关资料 以备后续查询使用 表达式 显示效果 4ac over b 4 a c
  • 性能测试指标解析

    系统性能测试指标 1 并发数 同一时间与服务器进行交互的用户数 绝对并发 同一时刻 即同一时间点 并发对服务器同时发出请求 相对并发 指一段时间内 即同一时间区间 并发用户对服务器发送请求 2 响应时间 事务请求到结束全程消耗的时间总和 包
  • Vue基础知识(Web开发技术)(三)—Vue过渡和动画

    OMG有代码的部分我先不搞了一般自己老师都发了代码 我只写可能考和帮助理解的知识 文章回头再修 目录 导读 1 过渡和动画基础 01什么是过渡和动画 过渡 动画 02过渡和动画的作用 03transition组件 2 内置过渡名和自定义过渡
  • 滑动窗口算法实现单位时间API限流

    文章目录 1 限流 2 滑动窗口算法 3 代码实现 3 1 通用工具类 RateLimiterSlidingWindow 3 2 测试用例 3 3 测试结果 3 4 业务实现 3 5 测试成果 1 限流 限流顾名思义 就是对请求或并发数进行
  • 盗梦空间:在X86平台上构建ARM模拟器

    需求来源于如何构建arm平台的Ubuntu文件系统 我们希望在ARM开发板上使用Ubuntu系统 那么就需要构建一个Ubuntu的根文件系统 然后可基于该基础文件系统 进一步扩展开发 比如 可以使用不同的桌面版本 安装需要的arm源安装包等
  • 基于openwrt的wifi 渗透

    背景 使用路由器刷了 openwrt的固件 然后尝试破解wpa等wifi的密码 配置好网络之后 使用ssh连接路由器 测试连通性 0 ping downloads openwrt org root OpenWrt ping download
  • java中的锁面试题

    1 多线程中 synchronized 锁升级的原理是什么 synchronized 是 JVM 层面的锁 是 Java 关键字 通过 monitor 对象来完成 synchronized 的实现涉及到锁的升级 具体为无锁 偏向锁 自旋锁
  • 正式使用rem

    需求 移动端推广页面 需要嵌入到微信公众号 现况 之前全部都用绝对单位 没有认真使用过相对单位rem 看了一些购物网站都在用rem 于是这次完全使用了rem写页面 目的 实际检测rem布局效果 安卓和ios分辨率不一样 导致字体大小也不一样
  • Kafka生产者与消费者api示例

    生产者api示例 一个正常的生产逻辑需要具备以下几个步骤 配置生产者参数及创建相应的生产者实例 构建待发送的消息 发送消息 关闭生产者实例 采用默认分区方式将消息散列的发送到各个分区当中 package com doitedu import
  • Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springfr

    今天写springboot的项目时报错 Error starting ApplicationContext To display the auto configuration report re run your application w
  • 怎样在计算机上注册dll文件,注册dll文件【搞定步骤】

    喜欢使用电脑的小伙伴们一般都会遇到win7系统注册dll文件的问题 突然遇到win7系统注册dll文件的问题就不知道该怎么办了 其实win7系统注册dll文件的解决方法非常简单 按照 1 在电脑桌面上 依次选中菜单项开始 运行 打开运行窗口
  • PCL学习笔记:PCL的初次安装和使用。

    注 资料来源 D 项目资料 YC 激光扫描建模 长沙项目 2016 2019 2017 2018 文档资料 技术总结YC 201703 YC 激光建模技术总结 201703及以后 docx 目录 A PCL的初步安装及测试 0 安装平台 1