1.VTK簡介
Vtk,(visualization toolkit)是一個開源的免費軟件系統,主要用於三維計算機圖形學、圖像處理和可視化。Vtk是在面向對象原理的基礎上設計和實現的,它的內核是用C++構建的,包含有大約250,000行代碼,2000多個類,還包含有幾個轉換界面,因此也可以自由的通過Java,Tcl/Tk和Python各種語言使用vtk。
——來源百度詞條
The Visualization Toolkit (VTK) is open source software for manipulating and displaying scientific data. It comes with state-of-the-art tools for 3D rendering, a suite of widgets for 3D interaction, and extensive 2D plotting capability.
——來源VTK官網介紹
個人觀點:VTK作爲3D處理開源庫,不僅支持3D數據的加載、顯示和豐富通用工具,還擁有強大的3D數據處理函數,乃3D視覺居家必備良器。
作爲比較:
OpenGL:僅作爲3D渲染引擎,需要自己編寫很多工具或者操作,自由度高,但是太容易重複造輪子。
PCL(Point Cloud Library):以VTK爲基礎針對三維點雲處理做了很多運算操作,但最新版本是2014年的,後續沒有更新了,所以就不考慮使用了。
OpenCV Viz:編譯OpenCV時會有Viz選項,可以將VTK編譯到OpenCV中作爲三維顯示控件,使用方便,但與OpenCV綁定,如果不需要使用OpenCV時,僅顯示處理三維數據,也不必考慮。
2.VTK編譯
根據個人使用情況,需要在VS2017+Qt5.9.2環境下使用VTK,因此本博客主要記錄該環境下的VTK配置。
首先完成VTK的編譯,步驟如下:
-
VTK官網下載源代碼:
鏈接:https://vtk.org/download/#latest
本人下載的是vtk-8.2.0,此時9.0.0版本處於測試版本階段。 -
解壓到選定的文件夾。(F:\VTK\VTK-8.2.0)
-
使用CMake進行編譯。首先在
F:\VTK\VTK-8.2.0
中創建build
文件夾,並且在build文件夾下創建install
文件夾。則使用CMake中按照需求,設置對應地址和平臺。
-
Configure——Generate——Open Project
將CMAKE_INSTALL_PREFIX
設置到install
文件夾,點擊Configure
,稍等片刻即可完成配置,出現“Configuring done”,則說明配置無誤。之後Generate
,最後Open Project
。這樣就完成了在VS2017開發環境下的VTK工程搭建。
-
編譯+安裝
在VS2017中打開了工程,將工程切換到release
+x64
之後編譯ALL_BUILD
,編譯需要花費一段時間,耐心等待(可以寫寫博客、看看文章)。
所有內容編譯通過即得到相應dll
和lib
,分別在build——bin\lib文件夾內。
最後編譯INSTALL
,在build
文件夾下會有bin \ include \ lib
文件夾,其中即包含着dll \ lib \ .h
文件。其中lib\cmake\vtk-8.2
中存在對應CMake文件,OpenCV或者其他庫編譯時,選擇該地址。
3.Qt的VTK控件編譯
在CMake中,選擇VTK_Group_Qt
,再點擊Configure
,此時會報錯,選項中會增加Qt對應選項,根據Qt版本,選擇VTK_QT_VERSION
,然後選擇Qt5_DIR
,本人環境中選擇的是D:/Qt/Qt5.9.2/5.9.2/msvc2017_64/lib/cmake/Qt5
。重新Configure \ Generate \ ALL_BUILD \ INSTALL
即可。
此時會生成F:\VTK\VTK-8.2.0\build\install\plugins\designer\QVTKWidgetPlugin.dll
,將其複製到Qt對應目錄下D:\Qt\Qt5.9.2\5.9.2\msvc2017_64\plugins\designer
。
此時打開Qt Designer,Widget Box中就會有QVTKWidget
。
至此,已經完成了Qt 5.9.2+VTK 8.2.0的開發環境搭建。
可根據個人環境配置,進行相應調整即可。
4.VS2017+Qt+VTK環境搭建
新建的Qt圖形界面中直接增加QVTKWidget,界面按照需求設計。接下來對路徑設置進行記述。
- 項目——屬性——VC++——包含目錄,增加
F:\VTK\VTK-8.2.0\build\install\include\vtk-8.2
。 - 庫目錄,增加
F:\VTK\VTK-8.2.0\build\lib\Release
(因爲該文件夾下有QVTKWidget.lib,install下沒有)。 - 鏈接器——輸入——依賴附加項,增加:
vtkChartsCore-8.2.lib
vtkCommonColor-8.2.lib
vtkCommonComputationalGeometry-8.2.lib
vtkCommonCore-8.2.lib
vtkCommonDataModel-8.2.lib
vtkCommonExecutionModel-8.2.lib
vtkCommonMath-8.2.lib
vtkCommonMisc-8.2.lib
vtkCommonSystem-8.2.lib
vtkCommonTransforms-8.2.lib
vtkDICOMParser-8.2.lib
vtkDomainsChemistry-8.2.lib
vtkDomainsChemistryOpenGL2-8.2.lib
vtkdoubleconversion-8.2.lib
vtkexodusII-8.2.lib
vtkexpat-8.2.lib
vtkFiltersAMR-8.2.lib
vtkFiltersCore-8.2.lib
vtkFiltersExtraction-8.2.lib
vtkFiltersFlowPaths-8.2.lib
vtkFiltersGeneral-8.2.lib
vtkFiltersGeneric-8.2.lib
vtkFiltersGeometry-8.2.lib
vtkFiltersHybrid-8.2.lib
vtkFiltersHyperTree-8.2.lib
vtkFiltersImaging-8.2.lib
vtkFiltersModeling-8.2.lib
vtkFiltersParallel-8.2.lib
vtkFiltersParallelImaging-8.2.lib
vtkFiltersPoints-8.2.lib
vtkFiltersProgrammable-8.2.lib
vtkFiltersSelection-8.2.lib
vtkFiltersSMP-8.2.lib
vtkFiltersSources-8.2.lib
vtkFiltersStatistics-8.2.lib
vtkFiltersTexture-8.2.lib
vtkFiltersTopology-8.2.lib
vtkFiltersVerdict-8.2.lib
vtkfreetype-8.2.lib
vtkGeovisCore-8.2.lib
vtkgl2ps-8.2.lib
vtkglew-8.2.lib
vtkGUISupportQt-8.2.lib
vtkGUISupportQtSQL-8.2.lib
vtkhdf5-8.2.lib
vtkhdf5_hl-8.2.lib
vtkImagingColor-8.2.lib
vtkImagingCore-8.2.lib
vtkImagingFourier-8.2.lib
vtkImagingGeneral-8.2.lib
vtkImagingHybrid-8.2.lib
vtkImagingMath-8.2.lib
vtkImagingMorphological-8.2.lib
vtkImagingSources-8.2.lib
vtkImagingStatistics-8.2.lib
vtkImagingStencil-8.2.lib
vtkInfovisCore-8.2.lib
vtkInfovisLayout-8.2.lib
vtkInteractionImage-8.2.lib
vtkInteractionStyle-8.2.lib
vtkInteractionWidgets-8.2.lib
vtkIOAMR-8.2.lib
vtkIOAsynchronous-8.2.lib
vtkIOCityGML-8.2.lib
vtkIOCore-8.2.lib
vtkIOEnSight-8.2.lib
vtkIOExodus-8.2.lib
vtkIOExport-8.2.lib
vtkIOExportOpenGL2-8.2.lib
vtkIOExportPDF-8.2.lib
vtkIOGeometry-8.2.lib
vtkIOImage-8.2.lib
vtkIOImport-8.2.lib
vtkIOInfovis-8.2.lib
vtkIOLegacy-8.2.lib
vtkIOLSDyna-8.2.lib
vtkIOMINC-8.2.lib
vtkIOMovie-8.2.lib
vtkIONetCDF-8.2.lib
vtkIOParallel-8.2.lib
vtkIOParallelXML-8.2.lib
vtkIOPLY-8.2.lib
vtkIOSegY-8.2.lib
vtkIOSQL-8.2.lib
vtkIOTecplotTable-8.2.lib
vtkIOVeraOut-8.2.lib
vtkIOVideo-8.2.lib
vtkIOXML-8.2.lib
vtkIOXMLParser-8.2.lib
vtkjpeg-8.2.lib
vtkjsoncpp-8.2.lib
vtklibharu-8.2.lib
vtklibxml2-8.2.lib
vtklz4-8.2.lib
vtklzma-8.2.lib
vtkmetaio-8.2.lib
vtkNetCDF-8.2.lib
vtkogg-8.2.lib
vtkParallelCore-8.2.lib
vtkpng-8.2.lib
vtkproj-8.2.lib
vtkpugixml-8.2.lib
vtkRenderingAnnotation-8.2.lib
vtkRenderingContext2D-8.2.lib
vtkRenderingContextOpenGL2-8.2.lib
vtkRenderingCore-8.2.lib
vtkRenderingFreeType-8.2.lib
vtkRenderingGL2PSOpenGL2-8.2.lib
vtkRenderingImage-8.2.lib
vtkRenderingLabel-8.2.lib
vtkRenderingLOD-8.2.lib
vtkRenderingOpenGL2-8.2.lib
vtkRenderingQt-8.2.lib
vtkRenderingVolume-8.2.lib
vtkRenderingVolumeOpenGL2-8.2.lib
vtksqlite-8.2.lib
vtksys-8.2.lib
vtktheora-8.2.lib
vtktiff-8.2.lib
vtkverdict-8.2.lib
vtkViewsContext2D-8.2.lib
vtkViewsCore-8.2.lib
vtkViewsInfovis-8.2.lib
vtkViewsQt-8.2.lib
vtkzlib-8.2.lib
爲了方便獲取這些lib文件名,在F:\VTK\VTK-8.2.0\build\install\lib
文件夾下創建一個bat腳本,命令如下:
@echo off
DIR "F:\VTK\VTK-8.2.0\build\install\lib" /B >libname.txt
pause
執行完成之後,即可得到libname.txt文件,複製其中.lib即可。
- 將
F:\VTK\VTK-8.2.0\build\install\bin
文件夾下所有.dll
文件複製到工程輸出目錄下。 - 在main.cpp增加:
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built withvtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
//該問題源自:https://blog.csdn.net/wanhongluli/article/details/77852843
以上就完成了VS2017+Qt 5.9.2+VTK 8.2.0的開發環境搭建。
運行效果如下: