lib*_*orw 11 point-clouds point-cloud-library
我正在尝试使用PCL CloudViewer 可视化点云.问题是,我是很新的C++,我发现两个教程第一示范点云的创建和第二示范一个点云的可视化.但是,我无法将这两个教程结合起来.
这就是我的意思:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
int main (int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ> cloud;
// Fill in the cloud data
cloud.width = 5;
cloud.height = 1;
cloud.is_dense = false;
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);
}
pcl::visualization::CloudViewer viewer ("Simple Cloud Viewer");
viewer.showCloud (cloud);
while (!viewer.wasStopped ())
{
}
return (0);
}
Run Code Online (Sandbox Code Playgroud)
但即使不编译:
error: no matching function for call to
‘pcl::visualization::CloudViewer::showCloud(pcl::PointCloud<pcl::PointXYZ>&)’
Run Code Online (Sandbox Code Playgroud)
ahc*_*cox 10
您的错误消息告诉您需要执行的操作:
error: no matching function for call to ‘pcl::visualization::CloudViewer::showCloud(pcl::PointCloud<pcl::PointXYZ>&)’
Run Code Online (Sandbox Code Playgroud)
因此,请转到CloudViewer的文档,并查看此成员函数采用的参数:http://docs.pointclouds.org/1.5.1/classpcl_1_1visualization_1_1_cloud_viewer.html
在那里我们看到它const MonochromeCloud::ConstPtr &cloud不需要传入的原始引用.这是来自boost的智能指针的typedef:
typedef boost::shared_ptr<const PointCloud<PointT> > pcl::PointCloud< PointT >::ConstPtr
Run Code Online (Sandbox Code Playgroud)
因此,当您创建云时,您需要将其包装在其中一个智能指针中,而不是将其作为局部变量.像(未经测试)的东西:
pcl::MonochromeCloud::ConstPtr cloud(new pcl::PointCloud<pcl::PointXYZ>());
Run Code Online (Sandbox Code Playgroud)
然后,当您传入变量云时,它将具有正确的类型,您将不会收到您报告的错误.您还必须将您的cloud.foos 更改为cloud->foos.
看看你给出的第二个例子,他们也是这样做的:
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);
Run Code Online (Sandbox Code Playgroud)
立即给出答案:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr ptrCloud(&cloud);
Run Code Online (Sandbox Code Playgroud)
然后在观众中放入ptrCloud,这就是它所期望的:
viewer.showCloud (ptrCloud);
Run Code Online (Sandbox Code Playgroud)