VS2019+Qt5.14.2+VTK8.2.0+ITK5.1.0环境配置
1. Qt5.14.2
- 下载地址:https://www.qt.io/download
- 安装注意:Qt编译器选用msvc2017_64
- 环境配置:
系统->高级系统设置>环境变量->系统变量:Path->添加qt的bin文件夹,如:D:\qt5.14.2\5.14.2\msvc2017_64\bin
2. VS2019
- 下载地址:https://visualstudio.microsoft.com/zh-hans/
- 插件下载:扩展->管理扩展->联机(搜索Qt Visual Tools)->下载->重启VS
- 环境设置:扩展->Qt VS Tools->Qt options->Add(qt编译器目录,如:D:\qt5.14.2\5.14.2\msvc2017_64)
3. VTK8.2.0
- 下载地址:https://vtk.org/download/
下载完成之后解压并用CMake编译,注意勾选Qt相关组件
也可直接使用编译好的文件,直接解压即可,链接:https://pan.baidu.com/s/1VgOIL3HGfNiMPAgYSJxFxA
提取码:3vti - 环境配置
(1) 在vs2019中,点击调试->xxx.调试属性(最后一个)->VC++目录->包含目录->添加编译好的vtk的include\ vtk-8.2文件(如:C:\VTK\VTK-8.2.0_Install\include\vtk-8.2)
点击调试->(最后一个)xxx.调试属性->VC++目录->库目录->添加编译好的vtk的lib文件(如:C:\VTK\VTK-8.2.0_Install\lib)
(2) 在vs2019中,点击调试->xxx.调试属性(最后一个)->链接器->输入->附加依赖库->添加vtk\bin目录下所有的.lib文件名(如: vtkChartsCore-8.2.lib等);注意事项:debug和release状态下的lib是不一样的,切换release状态得重新添加相应的.lib包。
4. ITK5.1.0
- 下载地址:https://itk.org/download/
下载完成之后解压并用CMake编译,注意勾选VTK相关组件
也可直接使用编译好的文件,直接解压即可,链接:https://pan.baidu.com/s/1JblJ2nbdWPbb8vK8grfQzA
提取码:lcka - 环境配置
(1) 在vs2019中,点击调试->(最后一个)xxx.调试属性->VC++目录->包含目录->添加编译好的itk的include\ vtk-8.2文件(如:D:\ITK5.1.0\bin\include\ITK-5.1);点击调试->(最后一个)xxx.调试属性->VC++目录->库目录->添加编译好的itk的lib文件(如:D:\ITK5.1.0\bin\lib)
(2) 在vs2019中,点击调试->xxx.调试属性(最后一个)->链接器->输入->附加依赖库->
添加itk\bin目录下所有的.lib文件名(如: ITKBiasCorrection-5.1.lib等);
5. 测试
下面来测试一个用ITK读取Dicom图片并用VTK显示的例子
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkGDCMImageIO.h"
#include "itkImageToVTKImageFilter.h"
#include <vtkSmartPointer.h>
#include <vtkImageActor.h>
#include <vtkImageData.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkImageFlip.h>
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
int main()
{
//设置读取图像类型
using PixelType = signed short;
const unsigned int Dimension = 2;
typedef itk::Image<PixelType, Dimension> ImageType;
typedef itk::ImageFileReader<ImageType> ReaderType;
//读取指针
ReaderType::Pointer reader = ReaderType::New();
//设置读取文件
reader->SetFileName("lung//I10");
//创建读取DCM的GDCMIOImage类
using ImageIOType = itk::GDCMImageIO;
ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
reader->SetImageIO(gdcmImageIO);
try
{
reader->Update();
}
catch (itk::ExceptionObject& e)
{
std::cerr << "exception in file reader" << std::endl;
std::cerr << e << std::endl;
return EXIT_FAILURE;
}
//连接滤波器,转换为VTK类型
typedef itk::ImageToVTKImageFilter<ImageType> FilterType;
FilterType::Pointer filter = FilterType::New();
filter->SetInput(reader->GetOutput());
try
{
filter->Update();
}
catch (itk::ExceptionObject& e)
{
std::cerr << "exception in file reader" << std::endl;
std::cerr << e << std::endl;
return EXIT_FAILURE;
}
vtkSmartPointer<vtkImageData> image = filter->GetOutput();
//由于ITK格式与VTK格式图片Y轴相反,因此要进行翻转
vtkSmartPointer<vtkImageFlip> imageflip = vtkSmartPointer<vtkImageFlip>::New();
imageflip->SetInputData(filter->GetOutput());
imageflip->SetFilteredAxes(1);//Y轴
imageflip->Update();
/* vtkImageActor在3D场景下渲染图像 */
vtkSmartPointer<vtkImageActor> actor = vtkImageActor::New();
actor->SetInputData(imageflip->GetOutput());
vtkSmartPointer<vtkRenderer> render = vtkRenderer::New();
render->AddActor(actor);
render->SetBackground(255, 1, 1);//设置窗口背景颜色
vtkSmartPointer<vtkRenderWindow> window = vtkRenderWindow::New();
window->SetSize(600, 600); //设置窗口大小
window->AddRenderer(render);
window->SetWindowName("the CT picture ");//设置窗口名称
vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkRenderWindowInteractor::New();
interactor->SetRenderWindow(window);
vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();
interactor->SetInteractorStyle(style);
interactor->Initialize();
interactor->Start();
return 0;
}