日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CloudCompare二次开发之如何配置PCL点云库?

發布時間:2024/1/18 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CloudCompare二次开发之如何配置PCL点云库? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 0.引言
  • 1.修改兩個CMakeLists.txt文件
  • 2.源碼編譯
  • 3.測試PCL

0.引言

??因筆者課題涉及點云處理,需要通過PCL進行點云數據分析處理,查閱現有網絡資料,實現了VisualStudio2015(x86)配置PCL1.8.1點云庫(見:VisualStudio如何配置PCL點云庫?)。而筆者對CloudCompare二次開發較為熟悉,希望在CloudCompare中使用PCL進行點云處理,所以本文在VS配置PCL成功的基礎上,實現CloudCompare-2.10.x對PCL的配置,并記錄了實現配置的過程。

1.修改兩個CMakeLists.txt文件

??(1)修改CloudCompare-2.10.x源文件目錄下的CMakeLists.txt
??

# PCL option( OPTION_BUILD_PCL "Check to add PCL 3rdParty" ON ) if ( OPTION_BUILD_PCL ) find_package(PCL REQUIRED) include_directories( ${PCL_INCLUDE_DIRS} ) message(${PCL_INCLUDE_DIRS}) link_directories( ${PCL_LIBRARY_DIRS} ) message(${PCL_LIBRARY_DIRS}) add_definitions( ${PCL_DEFINITIONS} ) endif()

??(2)修改CloudCompare-2.10.x源文件的CC目錄下的CMakeLists.txt
??①找到CMakeLists.txt,并打開
??
??②添加PCL配置
??

option( COMPILE_CC_CORE_LIB_WITH_PCL "Check to compile CC_CORE_LIB with PCL" ON) # 添加PCL配置

??③添加PCL環境
??

# PCL環境 if(COMPILE_CC_CORE_LIB_WITH_PCL) find_package(PCL REQUIRED) include_directories( ${PCL_INCLUDE_DIRS} ) #define the PCL_VER_1_8_OR_OLDER preprocessor to compile qPCL with older versions of PCL if ( PCL_VERSION VERSION_LESS 1.8 ) # VERSION_GREATER Works just like "greater or equal" set_property( TARGET ${PROJECT_NAME} APPEND PROPERTY COMPILE_DEFINITIONS PCL_VER_1_8_OR_OLDER ) endif() # Luca's PCL patch support if( PCL_VERSION VERSION_GREATER 1.7 ) #from 1.7 the patch was merged set_property( TARGET ${PROJECT_NAME} APPEND PROPERTY COMPILE_DEFINITIONS LP_PCL_PATCH_ENABLED ) endif() link_directories( ${PCL_LIBRARY_DIRS} ) add_definitions( ${PCL_DEFINITIONS} ) target_link_libraries( ${PROJECT_NAME} ${PCL_LIBRARIES}) #指定目標在運行時要尋找的鏈接庫 endif()

2.源碼編譯

??在Cmake中進行配置,會生成PCL相關的文件,并勾選COMPILE_CC_CORE_LIB_WITH_PCL。
??

??

3.測試PCL

??(1)修改mainwindow.ui文件
??①設計按鈕
??
??②編譯.ui
??

??(2)修改mainwindow.h文件
??

//點云濾波 void doActionPCLUniformSample(); // 均勻采樣

??(3)修改mainwindow.cpp文件
??①添加均勻采樣頭文件
??

#include <pcl/keypoints/uniform_sampling.h> // 均勻采樣

??注:若出現找不到pcl文件的情況,需要設置屬性表,具體可參考:VisualStudio如何配置PCL點云庫?。

??②添加均勻采樣實現代碼
??

// 均勻采樣 void MainWindow::doActionPCLUniformSample() { if (getSelectedEntities().size() != 1) { ccLog::Print(QStringLiteral("只能選擇一個點云實體")); return; } ccHObject* entity = getSelectedEntities()[0]; ccPointCloud* ccCloud = ccHObjectCaster::ToPointCloud(entity); // ---------------------------讀取數據到PCL---------------------------------- pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); cloud->resize(ccCloud->size()); for (int i = 0; i < cloud->size(); ++i) { const CCVector3* point = ccCloud->getPoint(i); cloud->points[i].x = point->x; cloud->points[i].y = point->y; cloud->points[i].z = point->z; } // -----------------------------對話框--------------------------------------- float radius = QInputDialog::getDouble(this, QStringLiteral("參數設置"), QStringLiteral("搜索半徑: "), 0.005, 0, 100, 4); // ----------------------------均勻采樣-------------------------------------- pcl::PointCloud<pcl::PointXYZ>::Ptr filtered(new pcl::PointCloud<pcl::PointXYZ>); pcl::UniformSampling<pcl::PointXYZ> us; us.setInputCloud(cloud); us.setRadiusSearch(radius); us.filter(*filtered); // ------------------------PCL->CloudCompare-------------------------------- if (!filtered->empty()) { ccPointCloud* newPointCloud = new ccPointCloud(QString("UniformSample")); for (int i = 0; i < filtered->size(); ++i) { double x = filtered->points[i].x; double y = filtered->points[i].y; double z = filtered->points[i].z; newPointCloud->addPoint(CCVector3(x, y, z)); } newPointCloud->setRGBColor(ccColor::Rgba(rand() % 255, rand() % 255, 0, 255)); newPointCloud->showColors(true); if (ccCloud->getParent()) { ccCloud->getParent()->addChild(newPointCloud); } ccCloud->setEnabled(false); addToDB(newPointCloud); refreshAll(); updateUI(); } else { ccCloud->setEnabled(true); // Display a warning message in the console dispToConsole("Warning: example shouldn't be used as is", ccMainAppInterface::WRN_CONSOLE_MESSAGE); } }

??③添加信號槽函數
??

connect(m_UI->actionsample, &amp;QAction::triggered, this, &amp;MainWindow::doActionPCLUniformSample);

??(4)生成
??

??(5)結果展示
??①原始點云
??

??②采樣后的點云(相比原始點云,變稀了)
??

參考資料:
[1] 來吧!我在未來等你!. CloudCompare如何進行二次開發的第一步:編譯?; 2023-04-28 [accessed 2023-05-14].
[2] 來吧!我在未來等你!. CloudCompare如何進行二次開發?; 2023-04-19 [accessed 2023-05-14].
[3] 來吧!我在未來等你!. VisualStudio如何配置PCL點云庫?; 2023-05-14 [accessed 2023-05-15].
[4] 點云俠. CloudCompare 二次開發(5)——非插件中的PCL環境配置(均勻采樣為例); 2023-02-17 [accessed 2023-05-14].

總結

以上是生活随笔為你收集整理的CloudCompare二次开发之如何配置PCL点云库?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。