creator qt 设置换行方式_win下使用QT添加VTK插件实现点云可视化GUI
大家在做點云的時候經常會用到QT,但是我們需要使用QT做點云的可視化的時候又需要VTK,雖然我們在windows下安裝PCL的時候就已經安裝了VTK,由于跟著PCL安裝的VTK是沒有和QT聯合編譯的,所以在使用PCL和QT做點云可視化界面的時候是無法使用可是QT的插件QVTKWidget,本文將主要講解一些PCL在Ubuntu系統和windows使用QT做界面的一些分享。
ubuntu 中使用QT和PCL
(1)如果是Ubuntu14.04,無論是使用命令行安裝PCL或者是QT,系統都已經將QVTKWidget的庫安裝好了,在使用QT時會自動的加載了QVTKWideget,并且使用我的例子正常cmake就可以實現QT與點云的相關功能,有興趣的可以查閱我們公眾號的github地址,當然在PCL的官方的源碼中也是有一些基本的例子,以我的經驗來說,在ubuntu14.04上使用應該是沒有什么問題。
(2)如果你安裝的是ubuntu16.04那么就可能比較麻煩,因為在使用的時候發現PCL中的QT的依賴工程并沒有改變,并且ubuntu16.04會默認安裝qt5,這就導致一些依賴項的沖突,甚至如果安裝了ROS包,也會出現一些問題,主要是PCL中的例子中都是依賴的QT4,而Ubuntu16.04的一些庫都是默認安裝QT5,所以會導致你編譯不過,所以有問題的可以歡迎討論。
我們知道在ubuntu系統下學習和使用PCL是十分方便的,并且安裝任何第三方庫都十分的便捷,這里就不再過多的說明。
windows 中使用QT和PCL
? ? ?在windows上使用PCL實現QT設計點云的可視化界面,這就又涉及到了工程軟件的問題,我相信大多數人都是使用VS,所以我的電腦安裝了VS3013 和VS2015,這里主要是使用VS2015 編譯實現點云PCL的開發在VS下的GUI的開發。如果你真的需要使用在VS下的界面設計點云的可視化的界面,那么你可以安裝以下的步驟試試,但是不能保證一定可以編譯通過,但是即便你編譯不過,只要你安裝了VS2015,并且你編譯的程序是X64 release那么就可以直接使用我編譯好的VTK的庫,直接使用,方便又省心。并在最后我將做一個簡單的demo用于大家的測試。
安裝和編譯的步驟
首先下載安裝PCL1.8windows的版本正常安裝,因為我們只需要替換掉第三方庫的VTK的部分,其他部分的庫原封不動。
PCL1.8.1依賴的第三方庫是VTK8.0,所以我們下載一個VTK的源碼,使用cmake進行編譯,接下來就是一步一步來,當然比可以跳過,直接去下載我編譯好的QVTK的庫
首先我們需要安裝了Qt5.8,這個很簡單直接去Qt官網搜索下載下來,一路安裝完成即可,這里沒什么需要值得注意的地方,接下來就是要使用cmake編譯VTK。
(1)啟動CMake,指定源碼目錄和編譯目錄,點擊Configure。
(2)VS 的版本一定是你安裝的版本指定,我選擇的是:Visual Studio 14 2015 Win64。點擊finish就,等待配置完成。會自動進行第一次的cmake.
(3)在第一次configure之后需要更新一下設置,首先點擊一下advanced,然后我們找到會找到以下幾個選項進行修改
該選擇為為VTK設置Qt的版本,這里需要選擇你已經安裝好的qt 的位置,主要是qmake.exe和Qtcmake.config這兩個路徑指定成功即可
如果出現錯誤,就需要你正常設置,這里其實主要就是QT的qmake以及qtcmake.config這兩個地方,如果提示DONXYGEN找不到,那么就將build_decument整個選項去掉。總之就是要配置好QT的路徑就可以了,如果你不知道如何在win對VTK進行cmake的編譯,沒關系,如果你也使用了Qt5.8并且使用VS2013,PCL的版本是1.8.1版本,那么就直接下載我已經編譯好的VTK X64的庫既可以了。
在cmake之后我們就可以生成了對應的VS工程文件
(5)Generate工程
配置成功后,出現Configure done提示。點擊Generate生成工程。
(6)啟動VS2015開始編譯
出現Generating done提示表示VS2015工程已經生成成功。點擊Open Project,VS2015會啟動,并打開工程。
即便你沒有編譯成功,也沒有關系,這里我已經將編譯好的VTK打包https://download.csdn.net/download/u013019296/12093433(這里的下載積分不是我能決定的)
下載對應的VTK即可,前提是你也要保證你使用的是VS2015,QT 5.8,PCL1.8.1,在下載了我編譯好的依賴項之后,只需要安裝包復制在我們安裝的PCL1.8.1的thirdtarty,后面的程序中設置好路徑一般都是沒問題
(7)將3rdParty\QVTK\plugins\designer下的QVTKWidgetPlugin.dll拷貝到QT\5.8\msvc2015_64\plugins\designer下,這樣Qt里面就有了QVtk的控件了。這一步將會讓你在打開QT_creator的界面的時候會看見
這里多了一個控件,整個時候就說明你已經安裝成功了,安裝成功要如果使用,也比較難以一次搞定。下面就是要設置VS的環境
以上就是將VTK的插件正確的放在了QT的第三方庫中,但是我們在使用配置環境的時候,總是會出現一些小問題,比如我們在上述的編譯的時候忘了設置為X64 release模式,等等
配置環境
如果一切準備工作都結束了,接下來我們為了測試一些我們新建一個工程,配置一下路徑,用來測試一下我們庫安裝是否有問題
(1)在VS2015中下載VS2015_QT的插件,選擇“擴展與更新”
(2)選擇網絡搜索輸入關鍵字“qt”下載第一個安裝即可。
(3)下載完成后重啟VS2015,你會發現”Qt VS Tool“這個選項,設置qmake所在路徑,在“QT option”中設置好qmake所在路徑即可
(4)此時我們就已經將所有的準備工作完成,可以新建一個QT的項目。此時比較頭疼的就是設置各種路徑的問題了:這里因為每個人的安裝路徑不一樣,但是如果你熟練的使用VS,就知道VS中的環境設置其實就只有三個主要的關鍵地方 include ?lib所在的路徑以及我們需要使用的lib列表,這里給出了我新建工程的設置文件的截圖,希望對你有所啟發。
lib路徑的列表:
最后是我們要輸入lib的列表,整個lib 因為我也不知道暫時會使用到哪一個,所以一般我是將所有的lib都作為輸入
向上滑動閱覽
qtmain.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Widgets.lib
pcl_common_release.lib
pcl_features_release.lib
pcl_filters_release.lib
pcl_io_release.lib
pcl_io_ply_release.lib
pcl_kdtree_release.lib
pcl_keypoints_release.lib
pcl_ml_release.lib
pcl_octree_release.lib
pcl_outofcore_release.lib
pcl_people_release.lib
pcl_recognition_release.lib
pcl_registration_release.lib
pcl_sample_consensus_release.lib
pcl_search_release.lib
pcl_segmentation_release.lib
pcl_stereo_release.lib
pcl_surface_release.lib
pcl_tracking_release.lib
pcl_visualization_release.lib
flann_cpp_s.lib
flann_s.lib
flann.lib
libboost_atomic-vc140-mt-1_64.lib
libboost_chrono-vc140-mt-1_64.lib
libboost_container-vc140-mt-1_64.lib
libboost_context-vc140-mt-1_64.lib
libboost_coroutine-vc140-mt-1_64.lib
libboost_date_time-vc140-mt-1_64.lib
libboost_exception-vc140-mt-1_64.lib
libboost_filesystem-vc140-mt-1_64.lib
libboost_graph-vc140-mt-1_64.lib
libboost_iostreams-vc140-mt-1_64.lib
libboost_locale-vc140-mt-1_64.lib
libboost_log-vc140-mt-1_64.lib
libboost_log_setup-vc140-mt-1_64.lib
libboost_math_c99-vc140-mt-1_64.lib
libboost_math_c99f-vc140-mt-1_64.lib
libboost_math_c99l-vc140-mt-1_64.lib
libboost_math_tr1-vc140-mt-1_64.lib
libboost_math_tr1f-vc140-mt-1_64.lib
libboost_math_tr1l-vc140-mt-1_64.lib
libboost_mpi-vc140-mt-1_64.lib
libboost_prg_exec_monitor-vc140-mt-1_64.lib
libboost_program_options-vc140-mt-1_64.lib
libboost_random-vc140-mt-1_64.lib
libboost_regex-vc140-mt-1_64.lib
libboost_serialization-vc140-mt-1_64.lib
libboost_signals-vc140-mt-1_64.lib
libboost_system-vc140-mt-1_64.lib
libboost_test_exec_monitor-vc140-mt-1_64.lib
libboost_thread-vc140-mt-1_64.lib
libboost_timer-vc140-mt-1_64.lib
libboost_unit_test_framework-vc140-mt-1_64.lib
libboost_wave-vc140-mt-1_64.lib
libboost_wserialization-vc140-mt-1_64.lib
qhullstatic.lib
qhull.lib
qhull_p.lib
qhull_r.lib
qhullcpp.lib
qhullstatic_r.lib
libEGL.lib
QVTKWidgetPlugin.lib
QVTKWidgetPlugin.lib
vtkInteractionWidgets-8.0.lib
vtkalglib-8.0.lib
vtkIOAMR-8.0.lib
vtkChartsCore-8.0.lib
vtkIOCore-8.0.lib
vtkCommonColor-8.0.lib
vtkIOEnSight-8.0.lib
vtkCommonComputationalGeometry-8.0.lib
vtkIOExodus-8.0.lib
vtkCommonCore-8.0.lib
vtkIOExport-8.0.lib
vtkCommonDataModel-8.0.lib
vtkIOExportOpenGL2-8.0.lib
vtkCommonExecutionModel-8.0.lib
vtkIOGeometry-8.0.lib
vtkCommonMath-8.0.lib
vtkIOImage-8.0.lib
vtkCommonMisc-8.0.lib
vtkIOImport-8.0.lib
vtkCommonSystem-8.0.lib
vtkIOInfovis-8.0.lib
vtkCommonTransforms-8.0.lib
vtkIOLegacy-8.0.lib
vtkDICOMParser-8.0.lib
vtkIOLSDyna-8.0.lib
vtkDomainsChemistry-8.0.lib
vtkIOMINC-8.0.lib
vtkDomainsChemistryOpenGL2-8.0.lib
vtkIOMovie-8.0.lib
vtkexoIIc-8.0.lib
vtkIONetCDF-8.0.lib
vtkexpat-8.0.lib
vtkIOParallel-8.0.lib
vtkFiltersAMR-8.0.lib
vtkIOParallelXML-8.0.lib
vtkFiltersCore-8.0.lib
vtkIOPLY-8.0.lib
vtkFiltersExtraction-8.0.lib
vtkIOSQL-8.0.lib
vtkFiltersFlowPaths-8.0.lib
vtkIOTecplotTable-8.0.lib
vtkFiltersGeneral-8.0.lib
vtkIOVideo-8.0.lib
vtkFiltersGeneric-8.0.lib
vtkIOXML-8.0.lib
vtkFiltersGeometry-8.0.lib
vtkIOXMLParser-8.0.lib
vtkFiltersHybrid-8.0.lib
vtkjpeg-8.0.lib
vtkFiltersHyperTree-8.0.lib
vtkjsoncpp-8.0.lib
vtkFiltersImaging-8.0.lib
vtklibharu-8.0.lib
vtkFiltersModeling-8.0.lib
vtklibxml2-8.0.lib
vtkFiltersParallel-8.0.lib
vtklz4-8.0.lib
vtkFiltersParallelImaging-8.0.lib
vtkmetaio-8.0.lib
vtkFiltersPoints-8.0.lib
vtknetcdf_c++.lib
vtkFiltersProgrammable-8.0.lib
vtkNetCDF-8.0.lib
vtkFiltersSelection-8.0.lib
vtkoggtheora-8.0.lib
vtkFiltersSMP-8.0.lib
vtkParallelCore-8.0.lib
vtkFiltersSources-8.0.lib
vtkpng-8.0.lib
vtkFiltersStatistics-8.0.lib
vtkproj4-8.0.lib
vtkFiltersTexture-8.0.lib
vtkRenderingAnnotation-8.0.lib
vtkFiltersTopology-8.0.lib
vtkRenderingContext2D-8.0.lib
vtkFiltersVerdict-8.0.lib
vtkRenderingContextOpenGL2-8.0.lib
vtkfreetype-8.0.lib
vtkRenderingCore-8.0.lib
vtkGeovisCore-8.0.lib
vtkRenderingFreeType-8.0.lib
vtkgl2ps-8.0.lib
vtkRenderingGL2PSOpenGL2-8.0.lib
vtkglew-8.0.lib
vtkRenderingImage-8.0.lib
vtkGUISupportQt-8.0.lib
vtkRenderingLabel-8.0.lib
vtkGUISupportQtSQL-8.0.lib
vtkRenderingLOD-8.0.lib
vtkhdf5_hl-8.0.lib
vtkRenderingOpenGL2-8.0.lib
vtkhdf5-8.0.lib
vtkRenderingQt-8.0.lib
vtkImagingColor-8.0.lib
vtkRenderingVolume-8.0.lib
vtkImagingCore-8.0.lib
vtkRenderingVolumeOpenGL2-8.0.lib
vtkImagingFourier-8.0.lib
vtksqlite-8.0.lib
vtkImagingGeneral-8.0.lib
vtksys-8.0.lib
vtkImagingHybrid-8.0.lib
vtkTestingGenericBridge-8.0.lib
vtkImagingMath-8.0.lib
vtkTestingIOSQL-8.0.lib
vtkImagingMorphological-8.0.lib
vtkTestingRendering-8.0.lib
vtkImagingSources-8.0.lib
vtktiff-8.0.lib
vtkImagingStatistics-8.0.lib
vtkverdict-8.0.lib
vtkImagingStencil-8.0.lib
vtkViewsContext2D-8.0.lib
vtkInfovisCore-8.0.lib
vtkViewsCore-8.0.lib
vtkInfovisLayout-8.0.lib
vtkViewsInfovis-8.0.lib
vtkInteractionImage-8.0.lib
vtkViewsQt-8.0.lib
vtkInteractionStyle-8.0.lib
vtkzlib-8.0.lib
這里比較多,就沒有都列舉出來
這里我們先試用一個VTK的程序測試一下我們的環境是否正常的配置成功。
向上滑動閱覽
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
int main(int, char *[])
{
???????// Create a plane
???????vtkSmartPointer planeSource =
??????????????vtkSmartPointer::New();
???????planeSource->SetCenter(1.0, 0.0, 0.0);
???????planeSource->SetNormal(1.0, 0.0, 1.0);
???????planeSource->Update();
???????vtkPolyData* plane = planeSource->GetOutput();
???????// Create a mapper and actor
???????vtkSmartPointer mapper =
??????????????vtkSmartPointer::New();
#if VTK_MAJOR_VERSION <= 5
???????mapper->SetInput(plane);
#else
???????mapper->SetInputData(plane);
#endif
???????vtkSmartPointer actor =
??????????????vtkSmartPointer::New();
???????actor->SetMapper(mapper);
???????// Create a renderer, render window and interactor
???????vtkSmartPointer renderer =
??????????????vtkSmartPointer::New();
???????vtkSmartPointer renderWindow =
??????????????vtkSmartPointer::New();
???????renderWindow->AddRenderer(renderer);
???????vtkSmartPointer renderWindowInteractor =
??????????????vtkSmartPointer::New();
???????renderWindowInteractor->SetRenderWindow(renderWindow);
???????// Add the actors to the scene
???????renderer->AddActor(actor);
???????renderer->SetBackground(.1, .2, .3); // Background color dark blue
??????????????????????????????????????????????????????????????????????// Render??and interact
???????renderWindow->Render();
???????renderWindowInteractor->Start();
???????return EXIT_SUCCESS;
}
一般是是沒有問題的,有問題的那么就是在啟動VTK的界面的時候,提示你初始化錯誤。
這個問題在之前的博客中是有記錄過的,只需要添加
#include
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
編譯成功后,在VTK中可視化了一個平面。
win 下PCL聯合QT點云GUI開發
新建的VS工程中,我們打開.ui進行界面編輯,注意其實QT的使用,你可以直接使用代碼進行排版,你也可以在界面的地方將你的控件排版好,然后保存,這個時候QT會幫你生成對應的代碼,比如我再找個ui的界面上,放了兩個按鈕,一個QVTKWideget可視化的插件,一個文本瀏覽器,需要實現的工程是:
第一個按鈕實現了打開一個PCD文件可視化在右邊的插件上,并且點云是可以可以使用鼠標自由的拖動的。
第二個按鈕實現了生成一個5000個點的正方體點云,并且每次點擊都會改變點云顏色。
QVTKWideget需要你設置一下顯示的位置,和在界面中的位置。
文本瀏覽器主要是說明一下程序的基本用途。如下圖設計
具體的每一個控件的命名我就不在一一說明了,在我們布局排版之后,我們可以點擊保存去實現每一個按鈕的功能即可,這里由于篇幅有限,就不再貼出實現的代碼。簡單截圖如下:
有興趣的小伙伴可以下載一下程序在自己的電腦上運行,下載地址?:
https://download.csdn.net/download/u013019296/12115883
這種使用QT的GUI布局有一些局限性,就是當我們放大和縮小的時候會導致界面不夠美觀,所以很多人會選擇使用代碼來排版,但是代碼排版就會讓你的代碼量比較多。我們嘗試打開程序 如下圖:
說明:
這是一個由“點云PCL”公眾號發布的一個關于使用VS2015聯合QT設計的一個點云可視化界面的程序,已經完成了封裝的發布的一個exe,可以在win7上直接點擊exe打開界面,實現了兩個按鈕,一個是打開一個PCD文件并且可視化,如右圖上,一個按鈕實現了生成一個正方體的點云,并且每一次按鈕就會改變點云的顏色。
如有問題可以聯系郵箱:dianyunpcl@163.com ,或者按要求申請加入免費知識星球,在星球提問,評論交流。
資源
大場景三維點云的語義分割綜述
PCL中outofcore模塊---基于核外八叉樹的大規模點云的顯示
基于局部凹凸性進行目標分割
基于三維卷積神經網絡的點云標記
點云的超體素(SuperVoxel)
基于超點圖的大規模點云分割
基于魚眼相機的SLAM方法介紹
點云學習歷史文章大匯總
關于我們
目前微信交流群不斷壯大,由于人數太多,目前有兩個群,為了鼓勵大家分享,我們希望大家能在學習的同時積極分享,將您的問題或者小總結投稿發到群主郵箱主郵箱dianyunpcl@163.com。
? ? ?以上內容如有錯誤或者需要補充的,請留言!同時歡迎大家關注微信公眾號,積極分享投稿,或者加入3D視覺微信群或QQ交流群。
? 原創不易,轉載請聯系群主,注明出處
點云PCL
?掃碼關注我們?
排版:particle? 供稿:be_young博客
? ? ? ?點一下“在看”你會更好看耶
總結
以上是生活随笔為你收集整理的creator qt 设置换行方式_win下使用QT添加VTK插件实现点云可视化GUI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 表贴电阻尺寸与什么有关_电路板上为什么会
- 下一篇: 内核aio_今天来说说令人让人傻傻分不清