PCL中PCLVisualizer類與CloudViewer類簡介與區別
阿新 • • 發佈:2018-11-17
PCLVisualizer視覺化類是PCL中功能最全的視覺化類,與CloudViewer視覺化類相比,PCLVisualizer使用起來更為複雜,但該類具有更全面的功能,如顯示法線、繪製多種形狀和多個視口。
我們先從官方文件及原始碼看起:
http://docs.pointclouds.org/1.8.1/classpcl_1_1visualization_1_1_cloud_viewer.html
http://docs.pointclouds.org/1.8.1/classpcl_1_1visualization_1_1_p_c_l_visualizer.html
對於CloudViewer類來說,其方法有大致以下幾類(駝峰規則讓原始碼看起來很舒服)
void showCloud() void wasStopped() void runOnVisualizationThread() void runOnVisualizationThreadOnce () void removeVisualizationCallable() boost::signals2::connection registerKeyboardCallback() boost::signals2::connection registerMouseCallback() boost::signals2::connection registerPointPickingCallback()
從名字中可以大致看出函式的意義:顯示點雲、關閉視窗、鍵盤滑鼠的響應。
void runOnVisualizationThread()
void runOnVisualizationThreadOnce ()
這兩個函式和PCLVisualizer關聯較大,一起使用更加甜蜜。
他們的可以在函式中呼叫一個物件,在介面中畫出想要的東西,但可能是隻執行一次的或者一直執行的。
//只會執行一次 void viewerOneOff (pcl::visualization::PCLVisualizer& viewer) { //設定背景顏色 viewer.setBackgroundColor (0.0, 0.0, 0.0); //球體座標 // pcl::PointXYZ o; // o.x = 0; // o.y = 0; // o.z = 0; ////新增球體 // viewer.addSphere (o, 1, "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); //viewer.addCoordinateSystem (1.0,0,0,0); //FIXME: possible race condition here: // user_data++; } void OpenOfflineOutputFile::open3DPointCloudFile(std::string& filepath) { pcl::PointCloud<pcl::PointXYZI>::Ptr m_cloud(new pcl::PointCloud<pcl::PointXYZI>); pcl::io::loadPCDFile(filepath,*m_cloud); pcl::visualization::CloudViewer viewer("3D Point Cloud Viewer"); viewer.showCloud(m_cloud); viewer.runOnVisualizationThreadOnce (viewerOneOff);//呼叫相應函式執行 viewer.runOnVisualizationThread (viewerPsycho);//呼叫相應函式執行 while(!viewer.wasStopped()) { } }
從上即可看出,PCLVisualizer的強大之處,可以改變視窗背景,還可以新增球體,設定文字,功能特別豐富。
由於PCLVisualizer中功能甘薯太多,這裡就不一一列舉了,大家可以按需自行查閱。這裡僅提供一個PCL中一個小方法:CloudViewer不能完成的介面功能可以使用PCLVisualizer。