我从官方文档中给出的代码运行点云可视化程序simpleVis(见此处)。
下面是代码的缩短版本。
#include <iostream>
#include <thread>
#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>
using namespace std::chrono_literals;
pcl::visualization::PCLVisualizer::Ptr simpleVis (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{
// --------------------------------------------
// -----Open 3D viewer and add point cloud-----
// --------------------------------------------
pcl::visualization::PCLVisualizer::Ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
viewer->setBackgroundColor (0, 0, 0);
viewer->addPointCloud<pcl::PointXYZ> (cloud, "sample cloud");
viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
viewer->addCoordinateSystem (1.0);
viewer->initCameraParameters ();
return (viewer);
}
// --------------
// -----Main-----
// --------------
int
main (int argc, char** argv)
{
// ------------------------------------
// -----Create example point cloud-----
// ------------------------------------
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 << "Generating example point clouds.\n\n";
// We're going to make an ellipse extruded along the z-axis. The colour for
// the XYZRGB cloud will gradually go from red to green to blue.
std::uint8_t r(255), g(15), b(15);
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 * std::cos (pcl::deg2rad(angle));
basic_point.y = sinf (pcl::deg2rad(angle));
basic_point.z = 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;
std::uint32_t rgb = (static_cast<std::uint32_t>(r) << 16 |
static_cast<std::uint32_t>(g) << 8 | static_cast<std::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 = basic_cloud_ptr->size ();
basic_cloud_ptr->height = 1;
point_cloud_ptr->width = point_cloud_ptr->size ();
point_cloud_ptr->height = 1;
pcl::visualization::PCLVisualizer::Ptr viewer;
viewer = simpleVis(basic_cloud_ptr);
while (!viewer->wasStopped ())
{
viewer->resetCamera();
viewer->spinOnce (100);
std::this_thread::sleep_for(100ms);
}
}
因此,一个窗口弹出,应该可视化的点云。但是,我只看到绿色,红色和黑色的区域,如下图所示。
然后我按 r,出现以下内容:
据我所知,出现的对象是点云。现在,如果我试图移动它。点云“涂抹”如下图所示。
我想出了以下几点:
- 如果我运行这里描述的简单的云查看器,可视化工作正常。
- 在过去的几个月里,我试图运行一个Python库来实现点云可视化,这个库也使用了PCL,问题也出现了。
你知道问题出在哪吗?
1条答案
按热度按时间toe950271#
这是轴在(0,0,0)处相交的深度放大。
要查看点云的更多内容,需要缩小(滚动鼠标滚轮)。
缩小可能会受到限制,这取决于焦点和视点的定义。
当鼠标光标悬停在中心上时按下“f”键通常会带你走得足够远以缩小。
一旦你有了一个合理的视图,你可以按'c'来获取(在stdout中)相机参数,并在代码中设置它们。