PCL可视化显示点云

转自:http://blog.csdn.net/wishchin/article/details/12905907?locationNum=5

(1):引用:仅仅是简单的显示点云,可以使用CloudViewer类。这个类非常简单易用。但要注意,它不是线程安全的。如果要用于多线程,还要参考PCLVisualizer。

需要注意的是,PointCloud的数据类型要和PCD文件中或者代码中的PointT一致!

并且:CloudViewer除了显示什么也不能干.

 显示代码为:

[cpp] view plain copy
  1. pcl::visualization::CloudViewer viewer ("Cluster viewer");  
  2.  viewer.showCloud(colored_cloud);  
  3.   while (!viewer.wasStopped ())  
  4.   {  
  5.   }  

(2):PCLVisualizer详细使用规则

 简单函数解释:
[cpp] view plain copy
  1. boost::shared_ptr simpleVis (pcl::PointCloud::ConstPtr cloud)  
  2. {  
  3.   // --------------------------------------------  
  4.   // -----Open 3D viewer and add point cloud-----  
  5.   // --------------------------------------------  
  6.   
  7.   boost::shared_ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));    
  8.   viewer->setBackgroundColor (0, 0, 0);    
  9.   viewer->addPointCloud (cloud, "sample cloud");    
  10.   viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");    
  11.   viewer->addCoordinateSystem (1.0);    
  12.   viewer->initCameraParameters ();  
  13.   
  14.   return (viewer);  
  15. }  
  16.   
  17.   
  18. 鼠标事件:  
[cpp] view plain copy
  1. void mouseEventOccurred (const pcl::visualization::MouseEvent &event,  
  2.                      void* viewer_void)  
  3. {  
  4.   boost::shared_ptr viewer = *static_cast *> (viewer_void);  
  5.   if (event.getButton () == pcl::visualization::MouseEvent::LeftButton && event.getType () == pcl::visualization::MouseEvent::MouseButtonRelease)  
  6.   {  
  7.     std::cout << "Left mouse button released at position (" << event.getX () << ", " << event.getY () << ")" << std::endl;  
  8.     char str[512];  
  9.   
  10.     sprintf (str, "text#%03d", text_id ++);  
  11.     viewer->addText ("clicked here", event.getX (), event.getY (), str);  
  12.   }  
  13. }  
键盘交互:
[cpp] view plain copy
  1. void keyboardEventOccurred (const pcl::visualization::KeyboardEvent &event,  
  2.                         void* viewer_void)  
  3. {  
  4.   boost::shared_ptr viewer = *static_cast *> (viewer_void);  
  5.   if (event.getKeySym () == "r" && event.keyDown ())  
  6.   {  
  7.     std::cout << "r was pressed => removing all text" << std::endl;  
  8.   
  9.     char str[512];  
  10.     for (unsigned int i = 0; i < text_id; ++i)  
  11.     {  
  12.       sprintf (str, "text#%03d", i);  
  13.       viewer->removeShape (str);  
  14.     }  
  15.     text_id = 0;  
  16.   }  
  17. }  
调用函数为:
[cpp] view plain copy
  1. viewer->registerKeyboardCallback (keyboardEventOccurred, (void*)&viewer);  
  2. viewer->registerMouseCallback (mouseEventOccurred, (void*)&viewer);  
摄像头初始化函数:
[cpp] view plain copy
  1. boost::shared_ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));  
  2. viewer->initCameraParameters ();  

后记:

       具体的使用方法还有很多,参见官方文档。

你可能感兴趣的:(算法,c/c++,人工智能)