VTK显示DICOM文件

#include "vtkActor.h"
#include "vtkImageActor.h"
#include "vtkCamera.h"
#include "vtkCellArray.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkPolyDataWriter.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h" 
#include "vtkProperty.h"
#include "vtkTubeFilter.h"
#include "vtkParametricSpline.h"
#include "vtkParametricFunctionSource.h"
#include "vtkDICOMReader.h"
#include "vtkImageProperty.h"
#include "vtkInformation.h"

#include "dcmtk/dcmdata/dcdicdir.h"
#include "dcmtk/dcmdata/dcdeftag.h"

#include "CommonTools/CommonTools.h"

#include 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

int main()
{
	vtkSmartPointer reader = vtkSmartPointer::New();
	reader->SetFileName("D:/1.dcm");
	reader->Update();
	
	//dcmtk读取窗宽窗位
	DcmFileFormat fileformat;
	OFCondition status = fileformat.loadFile("D:/1.dcm");//这里的loadfile只接收ASCII char*的路径
	DcmDataset *fileDataset = fileformat.getDataset();

	Float64 f64;
	fileDataset->findAndGetFloat64(DCM_WindowWidth, f64);
	auto windowWidth = f64;
	fileDataset->findAndGetFloat64(DCM_WindowCenter, f64);
	auto windowCenter = f64;

	//创建Actor
	auto imageActor = vtkSmartPointer::New();
	imageActor->SetInputData(reader->GetOutput());
	//设置窗宽窗位
	auto window = imageActor->GetProperty()->GetColorWindow();
	auto level = imageActor->GetProperty()->GetColorLevel();
	imageActor->GetProperty()->SetColorWindow(windowWidth);
	imageActor->GetProperty()->SetColorLevel(windowCenter);

	imageActor->SetOrientation(0, 1, 0);
	imageActor->Update();
	//创建Renderer
	auto renderer = vtkSmartPointer::New();
	renderer->AddActor(imageActor);
	//创建Window
	auto renWin = vtkSmartPointer::New();
	renWin->AddRenderer(renderer);
	renWin->SetSize(250, 250);
	renWin->Render();
	//创建交互对象
	auto interactor = vtkSmartPointer::New();
	interactor->SetRenderWindow(renWin);
	interactor->Start();

	return 0;
}

VTK显示DICOM文件_第1张图片

如果不读取并设置窗宽窗位,显示效果会很差

VTK显示DICOM文件_第2张图片

DICOM文件下载

我的VTK/ITK文章列表

你可能感兴趣的:(VTK/ITK)