Mac下安装VTK6.2,并在Qt上使用VTK

最近要在mac运行一个Qt工程,需要使用OpenCV+ITK+VTK,搞了好久才搞定。我只想说,vtk+itk在mac上的资料真心少,虽然osx和linux的安装配置大体一样,但是就是那些许差异埋得坑真是磨人(特别是对于身为新手而言,泪奔啊 ´╮(╯﹏╰)╭ 。所以搞定之后打算好好写个博客记录自己踩过的坑,也供给他人提供经验少踩坑。

这边博客主要记录Mac上VTK的安装,和如何在Qt上使用VTK

环境:
- Mac OSX 10.11.2
- OpenCV3.0
- Qt 5
- QtCreator 3.5
- cmake version 3.5.2

VTK的安装

  1. 下载VTK源码包,可上官网下载 http://www.vtk.org/download/
    关于版本选择,还是那句话,(如果你并不需要最新版本独有的功能或对各版本区别不熟悉,还是下载前一个稳定版吧。) 这里因为我的工程用到了vtkRenderingFreeTypeOpenGL模块,而这个模块在VTK6.3被更改舍弃,所以为了正常运行我已有的工程,我选择了VTK6.2。在此提供多版本下载地址https://gitlab.kitware.com/vtk/vtk/tags

  2. 解压VTK源码包

  3. 进入目录创建build文件夹,存放编译文件

  4. 通过cmake配置并编译,这里可以用cmake GUI工具,或者直接在终端下用命令行ccmake配置。新手推荐使用GUI。
    以下为 cmake GUI界面,选择你的VTK目录及其build目录,按左下角的configure配置,选择生成Unix Makefile
    这里写图片描述

  5. cmake一般需要多次 configure > 红色警告,修改配置 >再次configure; 直到无红色警告再Generate。

    列出需要的cmake配置及可能碰到的问题1

主要配置

BUILD_SHARED_LIBS                ON
VTK_Group_Qt                     ON
VTK_QT_VERSION                  5
QT_QMAKE_EXECUTABLE          /Users/jerry/Applications/Qt/5.5/clang_64/bin/qmake
 Qt5_DIR                         /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5 
  • 默认是选择Qt4,如果你使用Qt5第一次configure之后会提示Qt版本错误
  • QT_QMAKE_EXECUTABLE 和 Qt5_DIR 与你Qt得安装路径相关,其中Qt5_DIR配置完之后如果不能自动检测Qt5各个模块的q make,需要手动配置。

    QT_QMAKE_EXECUTABLE /Users/jerry/Applications/Qt/5.5/clang_64/bin/qmake
    Qt5Core_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5Core
    Qt5Designer_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5Designer
    Qt5Gui_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5Gui
    Qt5Network_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5Network
    Qt5OpenGL_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5OpenGL
    Qt5Sql_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5Sql
    Qt5UiPlugin_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5UiPlugin
    Qt5WebKitWidgets_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5WebKitWidgets
    Qt5WebKit_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5WebKit
    Qt5Widgets_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5Widgets
    Qt5Xml_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5Xml
    Qt5_DIR /Users/jerry/Applications/Qt/5.5/clang_64/lib/cmake/Qt5

这里写图片描述

  1. 终端到 build目录下,执行make -j8,其中-j8 为多线程执行命令,加速编译过程
  2. 最后安装 make install -j8,这样就安装王完成了。

打开Qt Creator创建新工程

  1. 新建工程 > New Project
  2. 选择项目Application > Qt Widgets Application > next
  3. 工程名tesVTK,工程路径
  4. 之后一直默认选择,创建完成。

工程创建之后的目录如下

☁  Qt  tree testOpenCV
testVTK
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
├── testVTK.pro
└── testVTK.pro.user

0 directories, 6 files

对新建工程配置VTK路径链接

工程中的testVTK.pro即为工程自动生成的配置文件,我们只需要在此文件上添加需要用的配置,当然如果不知道自己用到哪些链接库,可全部添加。

INCLUDEPATH+= /usr/local/include/vtk-6.2
LIBS +=-L/usr/local/lib -lvtkChartsCore-6.2.1 \
-lvtkCommonColor-6.2.1 \ -lvtkCommonComputationalGeometry-6.2.1 \ -lvtkCommonCore-6.2.1 \ -lvtkCommonDataModel-6.2.1 \ -lvtkCommonExecutionModel-6.2.1 \ -lvtkCommonMath-6.2.1 \ -lvtkCommonMisc-6.2.1 \ -lvtkCommonSystem-6.2.1 \ -lvtkCommonTransforms-6.2.1 \ -lvtkDICOMParser-6.2.1 \ -lvtkDomainsChemistry-6.2.1 \ -lvtkFiltersAMR-6.2.1 \ -lvtkFiltersCore-6.2.1 \ -lvtkFiltersExtraction-6.2.1 \ -lvtkFiltersFlowPaths-6.2.1 \ -lvtkFiltersGeneral-6.2.1 \ -lvtkFiltersGeneric-6.2.1 \ -lvtkFiltersGeometry-6.2.1 \ -lvtkFiltersHybrid-6.2.1 \ -lvtkFiltersHyperTree-6.2.1 \ -lvtkFiltersImaging-6.2.1 \ -lvtkFiltersModeling-6.2.1 \ -lvtkFiltersParallel-6.2.1 \ -lvtkFiltersParallelImaging-6.2.1 \ -lvtkFiltersProgrammable-6.2.1 \ -lvtkFiltersSMP-6.2.1 \ -lvtkFiltersSelection-6.2.1 \ -lvtkFiltersSources-6.2.1 \ -lvtkFiltersStatistics-6.2.1 \ -lvtkFiltersTexture-6.2.1 \ -lvtkFiltersVerdict-6.2.1 \ -lvtkGUISupportQt-6.2.1 \ -lvtkGUISupportQtOpenGL-6.2.1 \ -lvtkGUISupportQtSQL-6.2.1 \ -lvtkGUISupportQtWebkit-6.2.1 \ -lvtkGeovisCore-6.2.1 \ -lvtkIOAMR-6.2.1 \ -lvtkIOCore-6.2.1 \ -lvtkIOEnSight-6.2.1 \ -lvtkIOExodus-6.2.1 \ -lvtkIOExport-6.2.1 \ -lvtkIOGeometry-6.2.1 \ -lvtkIOImage-6.2.1 \ -lvtkIOImport-6.2.1 \ -lvtkIOInfovis-6.2.1 \ -lvtkIOLSDyna-6.2.1 \ -lvtkIOLegacy-6.2.1 \ -lvtkIOMINC-6.2.1 \ -lvtkIOMovie-6.2.1 \ -lvtkIONetCDF-6.2.1 \ -lvtkIOPLY-6.2.1 \ -lvtkIOParallel-6.2.1 \ -lvtkIOParallelXML-6.2.1 \ -lvtkIOSQL-6.2.1 \ -lvtkIOVideo-6.2.1 \ -lvtkIOXML-6.2.1 \ -lvtkIOXMLParser-6.2.1 \ -lvtkImagingColor-6.2.1 \ -lvtkImagingCore-6.2.1 \ -lvtkImagingFourier-6.2.1 \ -lvtkImagingGeneral-6.2.1 \ -lvtkImagingHybrid-6.2.1 \ -lvtkImagingMath-6.2.1 \ -lvtkImagingMorphological-6.2.1 \ -lvtkImagingSources-6.2.1 \ -lvtkImagingStatistics-6.2.1 \ -lvtkImagingStencil-6.2.1 \ -lvtkInfovisCore-6.2.1 \ -lvtkInfovisLayout-6.2.1 \ -lvtkInteractionImage-6.2.1 \ -lvtkInteractionStyle-6.2.1 \ -lvtkInteractionWidgets-6.2.1 \ -lvtkNetCDF-6.2.1 \ -lvtkNetCDF_cxx-6.2.1 \ -lvtkParallelCore-6.2.1 \ -lvtkRenderingAnnotation-6.2.1 \ -lvtkRenderingContext2D-6.2.1 \ -lvtkRenderingContextOpenGL-6.2.1 \ -lvtkRenderingCore-6.2.1 \ -lvtkRenderingFreeType-6.2.1 \ -lvtkRenderingFreeTypeOpenGL-6.2.1 \ -lvtkRenderingGL2PS-6.2.1 \ -lvtkRenderingImage-6.2.1 \ -lvtkRenderingLIC-6.2.1 \ -lvtkRenderingLOD-6.2.1 \ -lvtkRenderingLabel-6.2.1 \ -lvtkRenderingOpenGL-6.2.1 \ -lvtkRenderingQt-6.2.1 \ -lvtkRenderingVolume-6.2.1 \ -lvtkRenderingVolumeOpenGL-6.2.1 \ -lvtkViewsContext2D-6.2.1 \ -lvtkViewsCore-6.2.1 \ -lvtkViewsInfovis-6.2.1 \ -lvtkViewsQt-6.2.1 \ -lvtkalglib-6.2.1 \ -lvtkexoIIc-6.2.1 \ -lvtkexpat-6.2.1 \ -lvtkfreetype-6.2.1 \ -lvtkftgl-6.2.1 \ -lvtkgl2ps-6.2.1 \ -lvtkhdf5-6.2.1 \ -lvtkhdf5_hl-6.2.1 \ -lvtkjpeg-6.2.1 \ -lvtkjsoncpp-6.2.1 \ -lvtklibxml2-6.2.1 \ -lvtkmetaio-6.2.1 \ -lvtkoggtheora-6.2.1 \ -lvtkpng-6.2.1 \ -lvtkproj4-6.2.1 \ -lvtksqlite-6.2.1 \ -lvtksys-6.2.1 \ -lvtktiff-6.2.1 \ -lvtkverdict-6.2.1 \ -lvtkzlib-6.2.1

VTK安装路径一般在/usr/local/include 和 /usr/local/lib下。mac下的动态链接库后缀是.dylib,如libopencv_core.dylib,配置时需把lib 改成 -l,去掉.dylib。这里对于有个技巧可以列出所有的链接库,使用ls -1 /usr/local/lib/libvtk*命令单列列出链接库,复制文本再替换就行了。

编译运行例子

修改main.cpp如下

#include "mainwindow.h"
#include <QApplication>

//int main(int argc, char *argv[])
//{
// QApplication a(argc, argv);
// MainWindow w;
// w.show();

// return a.exec();
//}
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);

#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)

#include <vtkVersion.h>
#include <vtkPlaneSource.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>


int main(int, char *[])
{
  // Create a plane
  vtkSmartPointer<vtkPlaneSource> planeSource =
    vtkSmartPointer<vtkPlaneSource>::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<vtkPolyDataMapper> mapper =
    vtkSmartPointer<vtkPolyDataMapper>::New();
#if VTK_MAJOR_VERSION <= 5
  mapper->SetInput(plane);
#else
  mapper->SetInputData(plane);
#endif

  vtkSmartPointer<vtkActor> actor =
    vtkSmartPointer<vtkActor>::New();
  actor->SetMapper(mapper);

  // Create a renderer, render window and interactor
  vtkSmartPointer<vtkRenderer> renderer =
    vtkSmartPointer<vtkRenderer>::New();
  vtkSmartPointer<vtkRenderWindow> renderWindow =
    vtkSmartPointer<vtkRenderWindow>::New();
  renderWindow->AddRenderer(renderer);
  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
    vtkSmartPointer<vtkRenderWindowInteractor>::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;
}

最后可以编译运行了:Build the project (Build » Build Project or Ctrl+B) and run it (Build » Run or Ctrl+R).

运行结果
这里写图片描述

References:

  1. https://gitlab.kitware.com/vtk/vtk/tags
  2. http://my.oschina.net/u/1046919/blog/480094
  3. http://my.oschina.net/u/1046919/blog/483789

转载于:https://my.oschina.net/Jerrymingzj/blog/803831

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值