python配置vtk_可视化:第一个VTK例子

本文介绍了如何配置和搭建VTK开发环境,特别是在macOS上,使用Python进行三维可视化。通过下载VTK,配置CMake,然后编写C++和Python的简单示例,展示了如何创建和显示一个圆锥。
摘要由CSDN通过智能技术生成

各位读者好,长期以来,我几乎没有在公众号和知乎平台上写图像处理的文章,因为我觉得,对研发类文章感兴趣的人很少。但最近从CSDN和微信上留言情况来看,或许事实不像我当时认为的那样糟糕。这类文章能帮助其他人,甚至在很长时间内都能被人阅读,它的价值应该被重视起来。

VTK是非常优秀的开源系统,专门用于三维计算机图像处理和可视化任务。本文讲解VTK开发环境的搭建和第一个可视化例子。

环境:
VTK-8.1.1
macOS Catalina 10.15
Python 2.7.10

2f770247ab2dd35aeb22442d9b1e6b55.png

下载和安装

先到官网下载这套软件系统:https://vtk.org/download
尽量下载最新的VTK版本到本地。VTK源码和相关的例子都使用CMake进行管理的,下面我们开始CMake配置。如果没有CMake,请先安装这个工具,同样地,安装最新版本。
有许多的选项需要设置,比如跨平台软件开发框架Qt,生成VTK库的安装地址。同时,你可能已经注意到一些算法例子使用了Python,所以我们也应该配置脚本语言Python和TCL的变量。关于并行计算的开发工具TBB我暂时不写,害怕东西太多,让人接受不了~ 咱们慢慢来。
也许很多人喜欢用CMake GUI配置,然而,我觉得shell脚本更加提升工作效率,一次写好,受益无穷。上脚本。

configure.sh

cmake ./ -G "Unix Makefiles" \
-DVTK_USE_QVTK:BOOL=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DVTK_USE_GUISUPPORT:BOOL=ON \
-DVTK_QT_VERSION=5 \
-DModule_vtkGUISupportQt:BOOL=ON \
-DModule_vtkGUISupportQtOpenGL:BOOL=ON \
-DModule_vtkGUISupportQtSQL:BOOL=ON \
-DModule_vtkGUISupportQtWebkit:BOOL=OFF \
-DModule_vtkRenderingQt:BOOL=ON \
-DModule_vtkViewsQt:BOOL=ON \
-DVTK_WRAP_TCL:BOOL=ON \
-DTK_INTERNAL_PATH:PATH=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers/tk-private \
-DVTK_WRAP_PYTHON:BOOL=ON \
-DVTK_PYTHON_VERSION=2.7.10 \
-DPYTHON_EXECUTABLE=/usr/bin/python \
-DPYTHON_INCLUDE_DIR=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/python2.7 \
-DQt5_DIR:PATH=/Users/weiyang/Downloads/Qt5.11.2/5.11.2/clang_64/lib/cmake/Qt5

编译安装VTK:

bash configure.sh
make
sudo make install

安装完成后,我们来写第一个例子,显示一个圆锥。

第一个例子

下面将展示C++、Python的不同demo版本。它们的思路是一样的,使用vtkConeSource创建源数据,构建mapper、actor显示数据,将actor加入renderer中,使得VTK pipeline正常工作。

290e0519f91725fc05f9c7d8d8066a46.gif

C++ 版本

配置文件 CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(mytest)

find_package( VTK REQUIRED )
include( ${VTK_USE_FILE} )

add_executable(${PROJECT_NAME} "main.cpp")

target_link_libraries( ${PROJECT_NAME} ${VTK_LIBRARIES} )

main.cpp

#include 
#include
#include
#include
#include
#include
#include
#include
#include

#define vtkSPtr vtkSmartPointer
#define vtkSPtrNew(Var, Type) vtkSPtr Var = vtkSPtr::New();

using namespace std;

int main(){
vtkSPtrNew( cone, vtkConeSource );
vtkSPtrNew( mapper, vtkPolyDataMapper );
mapper->SetInputConnection( cone->GetOutputPort() );

vtkSPtrNew( actor, vtkActor );
actor->SetMapper( mapper );

vtkSPtrNew( renderer, vtkRenderer );
renderer->AddActor(actor);
renderer->SetBackground( 0, 0, 0 );

vtkSPtrNew( renderWindow, vtkRenderWindow );
renderWindow->AddRenderer( renderer );

vtkSPtrNew( renderWindowInteractor, vtkRenderWindowInteractor );
renderWindowInteractor->SetRenderWindow( renderWindow );

renderer->ResetCamera();
renderWindow->Render();
renderWindowInteractor->Start();
return 0;
}

Python 版本

#!/usr/bin/env python

import vtk

cone = vtk.vtkConeSource()

coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInputConnection( cone.GetOutputPort() )

coneActor = vtk.vtkActor()
coneActor.SetMapper( coneMapper )

ren1= vtk.vtkRenderer()
ren1.AddActor( coneActor )
ren1.SetBackground( 0, 0, 0 )

renWin = vtk.vtkRenderWindow()
renWin.AddRenderer( ren1 )

renWinInteractor = vtk.vtkRenderWindowInteractor()
renWinInteractor.SetRenderWindow( renWin )
renWinInteractor.Start()

现在已有的code比较多了,为避免影响阅读体验,TCL版本代码我就不贴在本文中了。如果你还对Tcl的demo好奇,可以访问 VTK – A Simple Example Written In Tcl Script。

该写点儿人物故事了,毕竟编故事才是我的主业。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值