配置: VS2008(32-bit)
Python2.7.8(32-bit)
Cmake 3.0
ITK4.5.2
VTK 版本要求5.9及其以上
注意: 和Python结合建议使用VS2008,在VS2010中有可能编译不通过,博主经过多次试验发现在VS2010中总是报错。
1.1 安装VS2008
1.2 安装Cmake
1.3 安装Python2.7.8
1.4 安装VTK 5.10(方法见之前的一篇博文)
1.5 下载pygccxml并安装:下载好以后使用Python 命令运行pygccxml文件夹中的setup.py文件。
1.6 下载ITK源码
新建一个目录#ITK_SOUCCE#,将itk下载到该目录下并且解压到当前文件夹。例如,如果#ITK_SOUCCE#=D:\ITK_source,那么解压后ITK的源文件放在了这个目录下面:D:\ITK_source\InsightToolkit-4.5.2
1.7 新建两个文件夹
存放cmake产生的ITK项目文件#SOLUTION_PATH#
存放编译成功后的bin,lib,include等文件#BUILD_OUTPUT#
例如,我的设置是#SOLUTION_PATH#=C:\IVTK\ITK32Py_install
#BUILD_OUTPUT# =C:\IVTK\ITK32Py
where is the source code 选择#ITK_SOUCCE#/InsightToolkit-4.5.2
where to build the binaries 选择#SOLUTION_PATH#
编译器选择VS 2008
等待Configure完成。
cmake的选项中将BUILDTESTING和BUILD EXAMPLES不选。
勾选BUILD_SHARED_LIBS.
勾选Advanced之后更改CMAKE_INSTALL_PREFIX(表示编译ITK后生成的lib 及include等的安装路径)设置为#BUILD_OUTPUT#
勾选ITKV3_COMPATIBILITY
勾选 ITK_WRAP_PYTHON
勾选 Module_ITKVtkGlue
检查VTK_DIR是否正确,例如C:/IVTK/VTK510_32Py/lib/vtk-5.10
再次点击 Configure, 直至所有条目都变成灰色,表示配置成功, 点击Generate确认。
3.1 设置环境变量
gccxml_pah=#SOLUTION_PATH#\Wrapping\Generators\GccXML\gccxml\bin
将%gccxml_path%添加到path环境变量的末尾
3.2 编译用VS2008打开位于#SOLUTION_PATH#下面的ITK项目文件,选择Release进行编译。
3.3 安装
编译成功后再次编译INSTALL工程,相关的include, lib和bin文件就被提取到了#BUILD_OUTPUT#目录下。
4.1 将#BUILD_OUTPUT#\bin中的dll文件复制到:#BUILD_OUTPUT#\ lib\ITK-4.5\Python
4.2将#BUILD_OUTPUT#\lib\ITK-4.5\Python路径添加到Eclipse的PYTHONPATH中
5.1 用ITK打开并保存一副图像
在上述代码后面添加:
5.3 ITK 配准的例子
iterationCommand = itkPyCommand_New()
NameError: name 'itkPyCommand_New' is notdefined
找到InsightToolkit.py文件(#BUILD_OUTPUT#\lib\ITK-4.5\Python下面),在最后一行添加添加from ITKPyUtilsPython import *,再次运行该例子程序。
接下来会遇到一个新的错误:
Traceback (most recent call last):
File"C:\Users\User\workspace\python_itk\registration2D.py", line 83, in
optimizer.AddObserver( itkIterationEvent(),iterationCommand.GetPointer() )
File "C:\IVTK\ITK32Py\lib\ITK-4.5\Python\ITKCommonBasePython.py",line 1464, in AddObserver
elif len(args) == 2 and not issubclass(args[1].__class__, itk.Command)and callable(args[1]):
File"C:\IVTK\ITK32Py\lib\ITK-4.5\Python\itkLazy.py", line 37, in__getattribute__
itkBase.LoadModule(module, namespace)
File"C:\IVTK\ITK32Py\lib\ITK-4.5\Python\itkBase.py", line 119, inLoadModule
for k, v in module.__dict__.items():
UnboundLocalError: local variable 'module'referenced before assignment
解决办法:在itkBase.py中(#BUILD_OUTPUT#\lib\ITK-4.5\Python下面),103行后面添加如下代码:
module = loader.load(swigModuleName)
再次运行该例子程序,即可成功。
转载:https://blog.csdn.net/taigw/article/details/38316847
注: