3.1至3.4小节,本例程ITK通过CMake编译好的全部可运行文件下载(包含ITK4.13.2目录下的Bin、Build、CMake、Source文件夹)
3.5小节,本例程通过 CMakeLists.txt 构建好的 ITK 可运行工程 itk1 文件夹下载(实现“ITK Hello World!!!”的窗口输出)
3.6小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 ITK 可运行工程 itk2 文件夹下载(实现“ITK Hello World!!!”的窗口输出)
3.7小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 ITK 可运行工程 itk2 文件夹下载(实现png图像的读取与另存)
4.1至4.5小节,本例程VTK通过CMake编译好的全部可运行文件下载(包含VTK8.2.0目录下的Bin、Build、Data、Source文件夹)
4.6小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 VTK 可运行工程 vtk1 文件夹下载(实现Cube工程Demo(立方体)的显示和交互)
4.7小节,本例程通过 CMakeLists.txt 构建好的 VTK 可运行工程 vtk2 文件夹下载(实现Cube工程Demo(立方体)的显示和交互)
4.8小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 VTK 可运行工程 vtk1 文件夹下载(实现png图像读取与显示)
第5小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的ITK和VTK都可运行工程 itk_vtk_3 文件夹下载(实现ITK读取、VTK显示png图像)
1.1 VS2019专业版软件安装包下载与安装
1.2 VS2019环境测试
2.1 CMake下载
2.2 CMake安装
3.1 ITK的下载
3.2 创建ITK编译目录
3.3 CMake的配置(ITK)
3.4 ITK电脑环境变量配置
3.5 测试ITK是否安装成功(CMakeLists.txt构建工程,输出“ITK Hello World!!!”)
3.6 手动新建项目配置ITK(不使用CMakeLists.txt构建)
3.7 手动配置的ITK项目进行.png图像的读取与另存(在3.6节基础上)
4.1 VTK8.2.0的下载(VTK-8.2.0和VTKData的下载)
4.2 创建VTK编译目录
4.3 CMake的配置(VTK)
4.4 VTK电脑环境变量配置
4.5 测试VTK是否安装成功(Cube工程Demo)
4.6 手动新建项目配置VTK(不使用CMakeLists.txt构建)
4.7 测试VTK是否安装成功(CMakeLists.txt构建Cube工程,显示Demo”)
4.8 手动配置的VTK项目进行.png图像读取与显示(在4.6节基础上)
链接 : https://pan.baidu.com/s/14g0Bxm47kGeQ2KC4SPJSDg 提取码: 568e
VS2019专业版配套完整安装及注册教程
打开VS2019-----创建新项目-------控制台应用------自定义解决方案与项目位置-----本地Windows调试器
#include <iostream> int main() { std::cout << "Hello World!\n";至此VS2019安装成功!!!
CMake3.16通过下载
CMake3.16安装包链接 :https://pan.baidu.com/share/init?surl=7xawdjtZsXIr0c8LMRSGGg 提取码:3ybc
CMake最新版本可到CMake官网下载 链接为:https://cmake.org/download/
以前版本可往此处下载:
2.2.1 打开下载好的安装包双击
2.2.2 勾选协议,next
2.2.3 默认,依旧next
2.2.4 自定义要安装的路径位置——>Install——>Finish完成CMake安装
至此CMake3.16安装成功!!!
ITK4.13.2源码下载
ITK4.13.2安装包链接:https://pan.baidu.com/s/1Sh2QoYUsN950rXUEWn7qhQ 提取码:tuks
3.1.1 ITK最新版本可到ITK官网下载 链接为:https://itk.org/download/
3.1.2 早期版本下载:
3.1至3.4小节,本例程ITK通过CMake编译好的全部可运行文件下载(包含ITK4.13.2目录下的Bin、Build、CMake、Source文件夹)
3.2.1 在自己的电脑中选择一个路径存放我们即将要编译的文件,我们假设选择F盘存放我们的文件,接下来我们需要在F盘的根目录下创建一个空文件夹,文件夹命名为 ITK4.13.2,我们在该文件夹同级目录下创建以下四个文件夹:
Bin 用来存放头文件以及共享库 Build用来存放ITK编译后的文件 CMake用于存放下载的CMake解压后的所有文件 Source用于存放下载的ITK解压后的所有源文件
3.2.2 将下载好的ITK4.13.2压缩包解压到 Source文件夹
3.2.3 解压后的 Source 文件夹
3.3.1 找到 cmake-gui.exe , 双击运行 CMake 软件,其路径为:
3.3.2 点击 Browse Source 按钮选择我们的Source目录下的InsightToolkit-4.13.2目录,点击 Browse Build 按钮选择我们的之前创建的 Build 目录,选择完点击“Configure”:
3.3.3 选择 Visual Studio 16 2019 (如果装的是其它版本,则选择其它版本),platform平台选择 x64(我用的是64位系统,根据自己的编译器与系统选择),后面默认,点击 Finish :
3.3.4 点击“Configure”进行配置,配置后如下图
3.3.5 点击 Advanced 选项,将 CMAKE_INSTALL_PREFIX 选项设置到我们之前创建 F:\Software\ITK4.13.2\Bin 文件夹,勾选BUILD_SHARED_LIBS 选项,用以生成动态链接库dll文件:
3.3.6 上述步骤设置完成后,可多次点击“Configure”进行配置,直到红色全部消失,并出现 Configuring done 提示
3.3.7 点击 Generate 按钮,生成后,点击 Open Project 按钮,VS将打开生成的项目
3.3.8 选中 解决方案资源管理器 中的 ALL_BUILD 工程,然后选择菜单栏下的 生成 选项中的 ALL_BUILD 选项
编译完成后输出窗口会显示成功XXX个
3.3.9 选择 解决方案资源管理器 下的 INSTALL 工程,点击VS菜单栏 生成 ——> 仅用于项目——> 仅生成INSTALL选项,VS会将把ITK相关的头文件、静态库动态库等提取到之前创建的 F:\Software\ITK4.13.2\Bin 文件夹下。
3.3.10 如下图,Bin 文件夹下会出现如下图四个文件,整个安装过程就完成了。
3.3.11 将库文件:F:\Software\ITK4.13.2\Bin\bin 和 F:\Software\ITK4.13.2\Build\bin\Debug 下的所有 .dll 文件复制粘贴到 C:\Windows\System32 和 C:\Windows\SysWOW64 目录下(相同的直接替换即可,我的共45个)
和 ITKIOGDCM-4.13d.dll
和 ITKIOGDCM-4.13d.dll
3.4.1 点击此电脑——>属性——>高级系统设置——>高级——>环境变量——>系统变量——>编辑环境变量,将 F:\Software\ITK4.13.2\Build 添加到系统环境变量中。
3.5小节,本例程通过 CMakeLists.txt 构建好的 ITK 可运行工程 itk1 文件夹下载(实现“ITK Hello World!!!”的窗口输出)
3.5.1 从 F:\Software\ITK4.13.2\Source\InsightToolkit-4.13.2\Examples\Installation 目录下直接复制 HelloWorld.cxx 文件和所需的 CMakeLists.txt 文件。
3.5.2 在 ITK4.13.2 文件下创建 itk1 文件夹,然后在该文件夹下创建 bin 文件夹和 src 文件夹,然后把前面复制的两个文件都放入 src 文件夹中
3.5.3 启动 CMake ,Browse Source 按钮选择我们刚创建的 itk1 目录下的 src 目录; Browse Build 按钮选择我们刚创建的 itk1 目录下的 bin 目录,点击 Configure 直到无红色错误
3.5.4 之后点击 Generate 按钮,生成后,点击 Open Project 按钮,VS将打开生成的项目
3.5.5 右击 HelloWorld,选择”设为启动项目“,然后点击 本地Windows调试器
3.5.5.1 报错,提示在 F:\Software\ITK4.13.2\Build\lib\Debug 目录下缺少 itkgdcmMSFF-4.13.lib 文件
3.5.6 从网上下载的别人相同环境编译好的库中拷贝 itkgdcmMSFF-4.13.lib 到 F:\Software\ITK4.13.2\Build\lib\Debug 目录下,再次点击 本地Windows调试器 运行
3.5.6.1 报错,提示在 F:\Software\ITK4.13.2\Build\lib\Debug 目录下缺少 ITKIOGDCM-4.13.lib 文件
可运行库文件见以下两链接:
Win10+VS2019(VS2017)+ITK4.13.2+CMake3.16-debug(release)可运行库
ITK4.13.2在VS2019、x64环境下编译好的可运行的debug版本的库文件
3.5.7 同理从网上下载的别人相同环境编译好的库中拷贝 ITKIOGDCM-4.13.lib 到 F:\Software\ITK4.13.2\Build\lib\Debug 目录下,再次点击 本地Windows调试器 运行
至此ITK4.13.2安装成功!!!
3.6小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 ITK 可运行工程 itk2 文件夹下载(实现“ITK Hello World!!!”的窗口输出)
3.6.1 在 ITK4.13.2 文件下创建 itk2 文件夹(用于存放手动新建的项目文件),VS2019——>创建新项目——>空项目——>下一步——>项目名称命名为 helloItk ——> 位置自定义为 F:\Software\VTK8.2.0\vtk1——>创建
3.6.2 在 源文件 中添加新建项 helloItk.cxx ,更改 名称 和 位置 ,添加
3.6.3 设置包含目录:解决方案中 右键 helloItk ——> 属性 ——> VC++目录 ——> 包含目录,添加
F:\Software\ITK4.13.2\Bin\include\ITK-4.13
F:\Software\ITK4.13.2\Build\Modules\Core\Common
F:\Software\ITK4.13.2\Source\InsightToolkit-4.13.2\Modules\IO\PNG\include
(注意平台选择x64,下同)
3.6.4 设置库目录:解决方案中 右键 helloItk ——> 属性 ——> VC++目录 ——> 库目录,添加 F:\Software\ITK4.13.2\Bin\lib
和 F:\Software\ITK4.13.2\Build\lib\Debug
3.6.5 配置预处理器:解决方案中 右键 helloItk ——> 属性 ——> C/C++ ——> 预处理器定义 中添加ITK_IO_FACTORY_REGISTER_MANAGER
注: 如果不添加此语句,读取图像时将会报错
3.6.6 配置链接器:解决方案中 右键 helloItk ——> 属性 ——> 链接器 ——> 输入 ——> 附加依赖项,添加 F:\Software\ITK4.13.2\Bin\lib 目录下的所有 .lib 文件
ITK4.13.2 的所有 .lib 文件如下:
注:如果安装的ITK版本不同,见3.6.6.1解决方法
ITKBiasCorrection - 4.13.lib ITKBioCell - 4.13.lib ITKCommon - 4.13.lib ITKDICOMParser - 4.13.lib itkdouble - conversion - 4.13.lib ITKEXPAT - 4.13.lib ITKFEM - 4.13.lib itkgdcmcharls - 4.13.lib itkgdcmCommon - 4.13.lib itkgdcmDICT - 4.13.lib itkgdcmDSED - 4.13.lib itkgdcmIOD - 4.13.lib itkgdcmjpeg12 - 4.13.lib itkgdcmjpeg16 - 4.13.lib itkgdcmjpeg8 - 4.13.lib itkgdcmMEXD - 4.13.lib itkgdcmMSFF - 4.13.lib itkgdcmopenjp2 - 4.13.lib itkgdcmsocketxx - 4.13.lib ITKgiftiio - 4.13.lib ITKIOBioRad - 4.13.lib ITKIOBMP - 4.13.lib ITKIOBruker - 4.13.lib ITKIOCSV - 4.13.lib ITKIOGDCM - 4.13.lib ITKIOGE - 4.13.lib ITKIOGIPL - 4.13.lib ITKIOHDF5 - 4.13.lib ITKIOImageBase - 4.13.lib ITKIOIPL - 4.13.lib ITKIOJPEG - 4.13.lib ITKIOLSM - 4.13.lib ITKIOMesh - 4.13.lib ITKIOMeta - 4.13.lib ITKIOMINC - 4.13.lib ITKIOMRC - 4.13.lib ITKIONIFTI - 4.13.lib ITKIONRRD - 4.13.lib ITKIOPNG - 4.13.lib ITKIOSiemens - 4.13.lib ITKIOSpatialObjects - 4.13.lib ITKIOStimulate - 4.13.lib ITKIOTIFF - 4.13.lib ITKIOTransformBase - 4.13.lib ITKIOTransformHDF5 - 4.13.lib ITKIOTransformInsightLegacy - 4.13.lib ITKIOTransformMatlab - 4.13.lib ITKIOVTK - 4.13.lib ITKIOXML - 4.13.lib itkjpeg - 4.13.lib ITKKLMRegionGrowing - 4.13.lib ITKLabelMap - 4.13.lib itklbfgs - 4.13.lib ITKMesh - 4.13.lib ITKMetaIO - 4.13.lib itkminc2 - 4.13.lib itknetlib - 4.13.lib itkNetlibSlatec - 4.13.lib ITKniftiio - 4.13.lib ITKNrrdIO - 4.13.lib ITKOptimizers - 4.13.lib ITKOptimizersv4 - 4.13.lib ITKPath - 4.13.lib itkpng - 4.13.lib ITKPolynomials - 4.13.lib ITKQuadEdgeMesh - 4.13.lib ITKSpatialObjects - 4.13.lib ITKStatistics - 4.13.lib itksys - 4.13.lib itktestlib - 4.13.lib itktiff - 4.13.lib ITKTransform - 4.13.lib ITKTransformFactory - 4.13.lib itkv3p_netlib - 4.13.lib itkvcl - 4.13.lib ITKVideoCore - 4.13.lib ITKVideoIO - 4.13.lib itkvnl - 4.13.lib ITKVNLInstantiation - 4.13.lib itkvnl_algo - 4.13.lib ITKVTK - 4.13.lib ITKWatersheds - 4.13.lib itkzlib - 4.13.lib ITKznz - 4.13.lib libitkhdf5_D.lib libitkhdf5_cpp_D.lib注:如果版本不同,见以下(3.6.6.1-3.6.6.4)方法:
3.6.6.1 打开目录 F:\Software\ITK4.13.2\Bin\lib ,
3.6.6.2 然后 按下键盘上的 CTRL+L
3.6.6.3 输入 cmd 并按下 回车
3.6.6.4 之后输入 dir /b *.lib>1.txt ,按下 回车,然后就会发现在 F:\Software\ITK4.13.2\Bin\lib 目录下会新建一个 1.txt 文件,且该文件包含所有当前目录下.lib的文件名,所以之后直接复制粘贴就可以使用了。
3.6.7 向 helloItk.cxx 中粘贴Demo代码(输出“ITK Hello World!")
#include <iostream> #include "itkImage.h" using namespace std; int main() { typedef itk::Image<unsigned short, 3> ImageType; ImageType::Pointer image = ImageType::New(); cout << "ITK Hello World !" << endl; return 0; }3.6.8 配置完成,运行 本地Windows调试器
至此,手动新建项目配置ITK(不使用CMakeLists.txt构建)完成!!!
注:1、如果编译时出现缺少 .lib 文件 或者无法打开 .lib 文件,可以先去 3.6.4 设置库目录小节中添加的两个库目录中查看是否存在缺少的这个.lib库文件,如果没有,则需要去找别人相同环境编译后的库添加进来就可以了。
2、如果编译时提示无法打开 .lib 文件,也可能是 3.6.5 配置链接器小节中添加的附加依赖项的库,实际在 3.6.4 设置库目录小节中的两个库目录中都不存在,所以需要去看无法打开的这个.lib文件是不是由于版本原因略微更改了名称,如果是这样,就把 3.6.5 配置链接器小节中添加的附加依赖项的库中对于的名称更改下就可以了。
例如比较常见的:libitkhdf5.lib 和 libitkhdf5_cpp.lib 被改成了 libitkhdf5_D.lib 和 libitkhdf5_cpp_D.lib
3.7小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 ITK 可运行工程 itk2 文件夹下载(实现png图像的读取与另存)
3.7.1 选择 F:\Software\ITK4.13.2\itk2\helloItk,将 itk_demo.png 和 itk_png_reader and writer.cxx 两个文件拷贝到此目录(你也可以选择其它png格式的图片)
itk_png_reader and writer.cxx 的源码:
#include "itkImage.h"//图像类的头文件 #include "itkImageFileReader.h"//图像读取类的头文件 #include <itkPNGImageIOFactory.h>// PNG对应 #include "itkImageFileWriter.h"//图像读取类的头文件 int main(int, char* argv[]) { //指定表示图像的像素和维数的值来定义图像的类型 typedef unsigned char PixelType;//图像的像素类型 const unsigned int Dimension = 3;//图像的维数 //定义图像的类型ImageType typedef itk::Image< PixelType, Dimension > ImageType; //使用图像类型把图像读取 Reader 类实例化 typedef itk::ImageFileReader< ImageType > ReaderType; //使用图像类型把图像读取 writer 类实例化 typedef itk::ImageFileWriter< ImageType > WriterType; //使用ReaderType类型来创建一个对象reader ReaderType::Pointer reader = ReaderType::New(); //使用WriterType类型来创建一个对象writer WriterType::Pointer writer = WriterType::New(); //图像的文件名通过 SetFileName( )方法来实现 //const char * filename = argv[0]; reader->SetFileName("itk_demo.png"); reader->Update(); //建立管道 writer->SetInput( reader -> GetOutput()); writer->SetFileName("itk_demo_new.png"); writer->Update(); return 0; }3.7.2 双击 F:\Software\ITK4.13.2\itk2\helloItk 目录下 helloVtk.sln 使用VS2019打开工程,选择 解决方案资源管理器 下的源文件下的 helloItk.cxx 文件,然后 右键 选择栏下的 移除 选项(选择移除,如果以后要添加文件还存在,如果选择删除此文件将被删除不存在)
3.7.3 移除后,然后选中 源文件,然后 右键 选择栏下的 添加 ——现有项 选项,选中 F:\Software\ITK4.13.2\itk2\helloItk 目录下的 itk_png_reader and writer.cxx 进行添加
3.7.4 然后点击 本地Windows调试器 运行
itk_demo.png itk_demo_new.png
注:因为此例子并未进行RGB读取,所以另存出来的图片是灰度图片。
至此,手动配置的ITK项目进行.png图像的读取与另存完成!!!
VTK8.2.0(包含VTK-8.2.0和VTKData压缩包)下载
VTK8.2.0的下载(包含VTK-8.2.0和VTKData压缩包):https://pan.baidu.com/s/1QsDkMMbKiYzmGSWAacSjFA 提取码:7yqh
4.1.1 VTK最新版本可到VTK官网下载 链接为:https://vtk.org/download/
4.1.2 VTK早期版本下载 VTK官网下载
4.1至4.5小节,本例程VTK通过CMake编译好的全部可运行文件下载(包含VTK8.2.0目录下的Bin、Build、Data、Source文件夹)
4.2.1 在自己的电脑中选择一个路径存放我们即将要编译的文件,我们假设选择 F盘 存放我们的文件,接下来我们需要在F盘的根目录下创建一个空文件夹,文件夹命名为 VTK8.2.0,我们在该文件夹同级目录下创建以下四个文件夹:
Bin 用来存放头文件以及共享库 -Install Build用来存放VTK编译后的文件 -Files Data用于存放下载的 VTKData-8.2.0.zip 解压后的所有文件 Source用于存放下载的 VTK-8.2.0.zip(或VTK-8.2.0.tar) 解压后的所有源文件 -VTK-8.2.0
4.2.2 将下载好的 VTK8.2.0.zip(或VTK-8.2.0.tar) 压缩包解压到 Source 文件夹
4.2.3 解压后的 Source 文件夹
4.2.4 将下载好的 VTKData-8.2.0.zip 压缩包解压到 Data 文件夹
4.2.5 解压后的 Data 文件夹
4.3.1 找到 cmake-gui.exe , 双击运行 CMake 软件,其路径为:
4.3.2 点击 Browse Source 按钮选择我们的 Source 目录下的 VTK-8.2.0 目录,点击 Browse Build 按钮选择我们的之前创建的 Build 目录,选择完点击“Configure”:
4.3.3 选择 Visual Studio 16 2019 (如果装的是其它版本,则选择其它版本),platform平台选择 x64(我用的是64位系统,根据自己的编译器与系统选择),后面默认,点击 Finish :
4.3.4 点击“Configure”进行配置,配置后如下图
4.3.5 勾选 BUILD_EXAMPLES ,将 CMAKE_INSTALL_PREFIX 选项设置到我们之前创建 F:\Software\VTK8.2.0\Bin 文件夹,勾选BUILD_SHARED_LIBS 选项,用以生成动态链接库dll文件:
4.3.6 上述步骤设置完成后,可多次点击“Configure”进行配置,直到红色全部消失,并出现 Configuring done 提示
4.3.7 点击 Generate 按钮,生成后,点击 Open Project 按钮,VS将打开生成的项目
4.3.8 选中 解决方案资源管理器 中的 ALL_BUILD 工程,然后 右键 选择栏下的 生成 选项
编译完成后输出窗口会显示成功XXX个
4.3.9 选择 解决方案资源管理器 下的 INSTALL 工程,然后 右键 选择栏下的 生成 选项,VS会将把VTK相关的头文件、静态库动态库等提取到之前创建的 F:\Software\VTK8.2.0\Bin 文件夹下。
4.3.10 如下图,Bin 文件夹下会出现如下图四个文件,整个安装过程就完成了。
4.4.1 点击此电脑——>属性——>高级系统设置——>高级——>环境变量——>系统变量——>编辑环境变量,将 F:\Software\VTK8.2.0\Bin\bin 添加到系统环境变量中。
4.5.1 选择 解决方案资源管理器 下的 Cube 工程,右击,选择 设为启动项目(注意选择 x64)
4.5.2 点击 本地Windows调试器 运行,便可以看到 Cube 工程的演示Demo
至此VTK8.2.0安装成功!!!
4.6小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 VTK 可运行工程 vtk1 文件夹下载(实现Cube工程Demo(立方体)的显示和交互)
4.6.1 在 VTK8.2.0 文件下创建 vtk1 文件夹(用于存放手动新建的项目文件),VS2019——>创建新项目——>空项目——>下一步——>项目名称命名为 helloVtk ——> 位置自定义为 F:\Software\VTK8.2.0\vtk1——>创建
4.6.2 在源文件中添加新建项 helloVtk.cxx ,更改 名称 和 位置 ,添加
4.6.3 设置包含目录:解决方案中 右键 helloVtk ——> 属性 ——> VC++目录 ——> 包含目录,添加 F:\Software\VTK8.2.0\Bin\include\vtk-8.2 (注意配置(Debug),平台为 x64)
4.6.4 设置库目录:解决方案中 右键 helloVtk ——> 属性 ——> VC++目录 ——> 库目录,添加 F:\Software\VTK8.2.0\Bin\lib
4.6.5 配置链接器:解决方案中 右键 helloVtk ——> 属性 ——> 链接器 ——> 输入 ——> 附加依赖项,添加 F:\Software\VTK8.2.0\Bin\lib 目录下的所有 .lib 文件
VTK8.2.0 的所有 .lib 文件如下:
注:如果安装的VTK版本不同,见3.6.6.1解决方法
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 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 vtkLocalExample-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 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 vtkzlib-8.2.lib4.6.6 向 helloVtk.cxx 中粘贴 Cube 项目Demo代码
/*========================================================================= Program: Visualization Toolkit Module: Cube.cxx Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // This example shows how to manually create vtkPolyData. // For a python version, please see: // [Cube](https://lorensen.github.io/VTKExamples/site/Python/DataManipulation/Cube/) #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); #include <vtkActor.h> #include <vtkCamera.h> #include <vtkCellArray.h> #include <vtkFloatArray.h> #include <vtkNamedColors.h> #include <vtkNew.h> #include <vtkPointData.h> #include <vtkPoints.h> #include <vtkPolyData.h> #include <vtkPolyDataMapper.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> #include <array> int main() { vtkNew<vtkNamedColors> colors; std::array<std::array<double, 3>, 8> pts = { {{{0, 0, 0}}, {{1, 0, 0}}, {{1, 1, 0}}, {{0, 1, 0}}, {{0, 0, 1}}, {{1, 0, 1}}, {{1, 1, 1}}, {{0, 1, 1}}} }; // The ordering of the corner points on each face. std::array<std::array<vtkIdType, 4>, 6> ordering = { {{{0, 1, 2, 3}}, {{4, 5, 6, 7}}, {{0, 1, 5, 4}}, {{1, 2, 6, 5}}, {{2, 3, 7, 6}}, {{3, 0, 4, 7}}} }; // We'll create the building blocks of polydata including data attributes. vtkNew<vtkPolyData> cube; vtkNew<vtkPoints> points; vtkNew<vtkCellArray> polys; vtkNew<vtkFloatArray> scalars; // Load the point, cell, and data attributes. for (auto i = 0ul; i < pts.size(); ++i) { points->InsertPoint(i, pts[i].data()); scalars->InsertTuple1(i, i); } for (auto&& i : ordering) { polys->InsertNextCell(vtkIdType(i.size()), i.data()); } // We now assign the pieces to the vtkPolyData. cube->SetPoints(points); cube->SetPolys(polys); cube->GetPointData()->SetScalars(scalars); // Now we'll look at it. vtkNew<vtkPolyDataMapper> cubeMapper; cubeMapper->SetInputData(cube); cubeMapper->SetScalarRange(cube->GetScalarRange()); vtkNew<vtkActor> cubeActor; cubeActor->SetMapper(cubeMapper); // The usual rendering stuff. vtkNew<vtkCamera> camera; camera->SetPosition(1, 1, 1); camera->SetFocalPoint(0, 0, 0); vtkNew<vtkRenderer> renderer; vtkNew<vtkRenderWindow> renWin; renWin->AddRenderer(renderer); vtkNew<vtkRenderWindowInteractor> iren; iren->SetRenderWindow(renWin); renderer->AddActor(cubeActor); renderer->SetActiveCamera(camera); renderer->ResetCamera(); renderer->SetBackground(colors->GetColor3d("Cornsilk").GetData()); renWin->SetSize(600, 600); // interact with data renWin->Render(); iren->Start(); return EXIT_SUCCESS; }注意:有的示例程序在程序最前端不含下面的代码,会导致报错,这是由于未使用CMake进行配置,所以需要在源代码前面加上
#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle);4.6.7 配置完成,运行 本地Windows调试器
至此,手动新建项目配置VTK完成!!!
4.7小节,本例程通过 CMakeLists.txt 构建好的 VTK 可运行工程 vtk2 文件夹下载(实现Cube工程Demo(立方体)的显示和交互)
4.7.1 从 F:\Software\VTK8.2.0\Source\VTK-8.2.0\Examples\DataManipulation\Cxx 目录下直接复制 Cube.cxx 文件和所需的 CMakeLists.txt 文件。
4.7.2 在 VTK8.2.0 文件下创建 vtk2 文件夹,然后在该文件夹下创建 bin 文件夹和 src 文件夹,然后把前面复制的两个文件都放入 src 文件夹中
4.7.3 由于拷贝的这个例子的 CMakeLists.txt 是创建四个工程的,所以如果只想创建 Cube 工程,需要将 CMakeLists.txt 作如下修改(即将添加其它三个工程的源文件和链接库命令删除即可):
cmake_minimum_required(VERSION 3.3...3.12 FATAL_ERROR) PROJECT (DataManipulation) find_package(VTK REQUIRED) vtk_module_config(VTK vtkCommonCore vtkCommonDataModel vtkFiltersGeometry vtkInteractionStyle vtkRenderingOpenGL2 ) include(${VTK_USE_FILE}) add_executable(Cube MACOSX_BUNDLE Cube.cxx) target_link_libraries(Cube ${VTK_LIBRARIES})4.7.4 启动 CMake ,Browse Source 按钮选择我们刚创建的 vtk2 目录下的 src 目录; Browse Build 按钮选择我们刚创建的 vtk2 目录下的 bin 目录,点击 Configure 直到无红色错误 ,选择 x64(或者根据你们呢自己电脑选择)
4.7.5 之后点击 Generate 按钮,生成后,点击 Open Project 按钮,VS将打开生成的项目
7.7.6 右击 Cube,选择”设为启动项目“,然后点击 本地Windows调试器
至此VTK使用 CMakeLists.txt 构建Cube工程成功!!!
4.8小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 VTK 可运行工程 vtk1 文件夹下载(实现png图像读取与显示)
4.8.1 选择 F:\Software\VTK8.2.0\vtk1\helloVtk,将 vtk_demo.png 和 vtk_png_reader.cxx 两个文件拷贝到此目录(你也可以选择其它png格式的图片)
vtk_png_reader.cxx 的源码:
#include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); #include <vtkPNGReader.h>//PNG读取类 #include <vtkImageViewer.h>//显示2D图像类 #include <vtkRenderWindowInteractor.h>//交互器类 int main() { //实例化一个对象pngReader vtkPNGReader* pngReader = vtkPNGReader::New(); pngReader->SetFileName("vtk_demo.png");//读取图片 //实例化一个对象pngViewer vtkImageViewer* bmpViewer = vtkImageViewer::New(); bmpViewer->SetInputConnection(pngReader->GetOutputPort());//读取的图像数据输出给显示对象输入 bmpViewer->SetColorLevel(128);//设置窗位 bmpViewer->SetColorWindow(256);//设置窗宽 bmpViewer->Render();//显示图像 //加入交互机制 //实例化一个交互器对象interactor vtkRenderWindowInteractor* interactor = vtkRenderWindowInteractor::New(); bmpViewer->SetupInteractor(interactor); interactor->Initialize(); interactor->Start();//使交互器处于等待状态 //getchar(); //释放内存 pngReader->Delete(); bmpViewer->Delete(); interactor->Delete(); return 0; }4.8.2 双击 F:\Software\VTK8.2.0\vtk1\helloVtk 目录下 helloVtk.sln 使用VS2019打开工程,选择 解决方案资源管理器 下的源文件下的 helloVtk.cxx 文件,然后 右键 选择栏下的 移除 选项(选择移除,如果以后要添加文件还存在,如果选择删除此文件将被删除不存在)
4.8.3 移除后,然后选中 源文件,然后 右键 选择栏下的 添加 ——现有项 选项,选中 F:\Software\VTK8.2.0\vtk1\helloVtk 目录下的 vtk_png_reader.cxx 进行添加
4.8.4 然后点击 本地Windows调试器 运行
按住鼠标左键在图片上左右或图片上下滑动可进行图片窗宽窗位的调节:
至此,手动配置的VTK项目进行.png图像读取与显示完成!!!
第5小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的ITK和VTK都可运行工程 itk_vtk_3 文件夹下载(实现ITK读取、VTK显示png图像)
5.1 在完成3.7节基础上,将目录 F:\Software\ITK4.13.2 中的 itk2 项目在相同目录下复制粘贴一份,并重命名为 itk_vtk_3
5.2 双击 目录 F:\Software\ITK4.13.2\itk_vtk_3\helloItk 中 helloVtk.sln 使用VS2019打开工程,选择 解决方案资源管理器 下的源文件下的 itk_png_reader and writer.cxx 文件,将其改名为 itk_png_reade_vtk_show.cxx
然后将 itk_png_reade_vtk_show.cxx 中的源码替换为以下源码:
#include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageToVTKImageFilter.h" #include "itkPNGImageIOFactory.h" #include "vtkImageViewer.h" #include "vtkRenderWindowInteractor.h" #include "vtkAutoInit.h" //#include "itkFlipImageFilter.h"//图像翻转滤波器类 #include "vtkImageFlip.h" #include "vtkSmartPointer.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INIT(vtkInteractionStyle); //ITK和VTK联合环境测试(ITK读取、VTK显示图像) int main(int argc, char** argv) { typedef itk::Image<unsigned char, 2> ImageType;//the type of pic typedef itk::ImageFileReader<ImageType> ReaderType; //the class of read pic typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType; //connenct itk and vtk ReaderType::Pointer reader = ReaderType::New(); ConnectorType::Pointer connector = ConnectorType::New(); reader->SetFileName("cuiti.png"); itk::PNGImageIOFactory::RegisterOneFactory(); connector->SetInput(reader->GetOutput()); connector->Update(); vtkSmartPointer<vtkImageFlip> imageflip = vtkSmartPointer<vtkImageFlip>::New(); imageflip->SetInputData(connector->GetOutput()); imageflip->SetFilteredAxes(1);//Y轴 图像正向显示 imageflip->Update(); vtkImageViewer* viewer = vtkImageViewer::New(); vtkRenderWindowInteractor* interactor = vtkRenderWindowInteractor::New(); viewer->SetInputData(imageflip->GetOutput()); viewer->SetupInteractor(interactor); viewer->GetRenderWindow()->SetSize(500, 500);//set window size viewer->SetColorWindow(255); //set window color viewer->SetColorLevel(128); //set the level of window viewer->Render(); interactor->Initialize(); interactor->Start(); return EXIT_SUCCESS; }5.3 设置包含目录:解决方案中 右键 helloVtk ——> 属性 ——> VC++目录 ——> 包含目录,添加
F:\Software\VTK8.2.0\Bin\include\vtk-8.2
F:\Software\ITK4.13.2\Source\InsightToolkit-4.13.2\Modules\Bridge\VtkGlue\include
F:\Software\ITK4.13.2\Source\InsightToolkit-4.13.2\Modules\Bridge\VTK\include
包含的后两个路径都是ITK和VTK之间作为桥梁链接的头文件目录:
5.4 设置库目录:解决方案中 右键 helloItk ——> 属性 ——> VC++目录 ——> 库目录,添加 F:\Software\VTK8.2.0\Bin\lib
5.5 配置链接器:解决方案中 右键 helloItk ——> 属性 ——> 链接器 ——> 输入 ——> 附加依赖项,添加 F:\Software\VTK8.2.0\Bin\lib 目录下的所有 .lib 文件
VTK8.2.0 的所有 .lib 文件如下:
注:如果安装的VTK版本不同,见3.6.6.1解决方法
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 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 vtkLocalExample-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 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 vtkzlib-8.2.lib5.6 然后点击 本地Windows调试器 运行
按住鼠标左键在图片上左右或图片上下滑动可进行图片窗宽窗位的调节:
至此,ITK读取、VTK显示png图像(手动配置ITK和VTK环境)完成!!!