PCL 可視化


可視化(visualization)是利用計算機圖形學和圖像處理技術,將數據轉換圖像在屏幕上顯示出來,並進行交互處理的的理論,方法和技術,

pcl_visualization庫建立了能夠快速建立原型的目的和可視化算法對三維點雲數據操作的結果。類似於opencv的highgui例程顯示二維圖像,在屏幕上繪制基本的二維圖形,庫提供了以下幾點:

(1)渲染和設置視覺特性的方法(如顏色、大小、透明度等)在PCL任意n維的點雲數據集pcl::PointCloud<T> format

                          

(2)在屏幕上繪制基本的3D形狀的方法(例如,圓柱體,球體,線,多邊形等),無論是從點集或參數方程;

                        

(3)一個直方圖可視化模塊(pclhistogramvisualizer)的二維圖;

                     

(4)大量的幾何和顏色處理pcl::PointCloud<T> datasets

                   

(5)a pcl::RangeImage 可視化模塊

                       .

1.   class  pcl::visualization::CloudViewer   類CloudViewer實現創建點雲可視化的窗口,以及相關的可視化功能   

Public Member Functions

  CloudViewer (const std::string &window_name)   構建可視化點雲窗口,窗口名為window_name
  ~CloudViewer ()     注銷窗口相關資源
void  showCloud (const ColorCloud::ConstPtr &cloud, const std::string &cloudname="cloud")
  可視化窗口顯示cloud對應的點雲,考慮到多個點雲用鍵值cloudname來限定是哪一個點雲
bool  wasStopped (int millis_to_wait=1)
  判斷用戶是否已經關閉窗口,如果是則需要注銷窗口
void  runOnVisualizationThread (VizCallable x, const std::string &key="callable")
  在窗口運行期間處理x的回調函數,key為鍵值標識此回調函數,知道窗口關閉
void  runOnVisualizationThreadOnce (VizCallable x)
  值調用回調函數一次
void  removeVisualizationCallable (const std::string &key="callable")
  刪除key對應的回調函數
boost::signals2::connection  registerKeyboardCallback (void(*callback)(const pcl::visualization::KeyboardEvent &, void *), void *cookie=NULL)
  注冊鍵盤事件回調函數,cookie為回調時的參數,callback為回調函數的指針
template<typename T >
boost::signals2::connection  registerKeyboardCallback (void(T::*callback)(const pcl::visualization::KeyboardEvent &, void *), T &instance, void *cookie=NULL)
  同上,其中的instance 指向是實現該回到函數的對象

(2)太多了這里就貼出所有的關於可視化的類    對於類的成員就不再一一介紹

class   pcl::visualization::CloudViewer
  Simple point cloud visualization class. More...
class   pcl::visualization::FloatImageUtils
  Provide some gerneral functionalities regarding 2d float arrays, e.g., for visualization purposes More...
class   pcl::visualization::PCLHistogramVisualizer
  PCL histogram visualizer main class. More...
class   pcl::visualization::ImageViewerInteractorStyle
  An image viewer interactor style, tailored for ImageViewer. More...
struct   pcl::visualization::ImageViewer::ExitMainLoopTimerCallback
struct   pcl::visualization::ImageViewer::ExitCallback
class   pcl::visualization::ImageViewer
  ImageViewer is a class for 2D image visualization. More...
class   pcl::visualization::PCLVisualizerInteractorStyle
  PCLVisualizerInteractorStyle defines an unique, custom VTK based interactory style for PCL Visualizer applications. More...
struct   pcl::visualization::Figure2D
  Abstract class for storing figure information. More...
class   pcl::visualization::PCLPainter2D
  PCL Painter2D main class. More...
class   pcl::visualization::PCLPlotter
  PCL Plotter main class. More...
class   pcl::visualization::PCLVisualizer
  PCL Visualizer main class. More...
class   pcl::visualization::PointCloudColorHandler< PointT >
  Base Handler class for PointCloud colors. More...
class   pcl::visualization::PointCloudColorHandlerRandom< PointT >
  Handler for random PointCloud colors (i.e., R, G, B will be randomly chosen) More...
class   pcl::visualization::PointCloudColorHandlerCustom< PointT >
  Handler for predefined user colors. More...
class   pcl::visualization::PointCloudColorHandlerRGBField< PointT >
  RGB handler class for colors. More...
class   pcl::visualization::PointCloudColorHandlerHSVField< PointT >
  HSV handler class for colors. More...

  等等*****************************************8

應用實例

cloud_viewer.cpp:

#include <pcl/visualization/cloud_viewer.h>   //類cloud_viewer頭文件申明
#include <iostream>                           //標准輸入輸出頭文件申明
#include <pcl/io/io.h>                        //I/O相關頭文件申明
#include <pcl/io/pcd_io.h>                    //PCD文件讀取
    

/**********************************************************************************
  函數是作為回調函數,在主函數中只注冊一次 ,函數實現對可視化對象背景顏色的設置,添加一個圓球幾何體
*********************************************************************************/
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++;
}
  /**************************************************************
  首先加載點雲文件到點雲對象,並初始化可視化對象viewer,注冊上面的回
   調函數,執行循環直到收到關閉viewer的消息退出程序
   *************************************************************/  
int 
main ()
{
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);    //聲明cloud 
    pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud);         //加載點雲文件
    
    pcl::visualization::CloudViewer viewer("Cloud Viewer");      //創建viewer對象
    
    //showCloud函數是同步的,在此處等待直到渲染顯示為止
    viewer.showCloud(cloud);
    
    //該注冊函數在可視化的時候只執行一次
    viewer.runOnVisualizationThreadOnce (viewerOneOff);
    
    //該注冊函數在渲染輸出時每次都調用
    viewer.runOnVisualizationThread (viewerPsycho);
    while (!viewer.wasStopped ())
    {
    //此處可以添加其他處理
    //FIXME: Note that this is running in a separate thread from viewerPsycho
    //and you should guard against race conditions yourself...
    user_data++;
    }
    return 0;
}

編譯結果如下

 

未完待續*************************8888888


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM