level 7
浩繁星尘
楼主
源程序是红宝书 第90页的 用迭代器 访问像素 我现在改成输入连续的二维dicom 图片 报错的
#include "stdafx.h"
#include <vtkSmartPointer.h>
#include <vtkImageViewer2.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkBMPReader.h>
#include <vtkImageData.h>
#include <vtkImageIterator.h>
#include <vtkDICOMImageReader.h>
#include <vtkImageCast.h>
int main(int argc, char* argv[])
{
if (argc < 1)
{
std::cout<<argv[0]<<" "<<"ImageFile(*.bmp)"<<std::endl;
return EXIT_FAILURE;
}
/*vtkSmartPointer<vtkBMPReader> reader =
vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName ( "C:\\Users\\dell\\Desktop\\lena.bmp" );
reader->Update();*/
vtkSmartPointer<vtkDICOMImageReader> reader =
vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetFileName("G:\\VTK\\QQmyp\\head\\head");//连续二维dicom图像
reader->Update();
vtkSmartPointer<vtkImageCast>imagecast=
vtkSmartPointer<vtkImageCast>::New();
imagecast->SetInput((vtkDataObject*)reader->GetOutput());
imagecast->SetOutputScalarTypeToUnsignedChar();
imagecast->Update();
int subRegion[6] = {50,100, 50, 100, 50, 100};
vtkImageIterator<unsigned char> it(reader->GetOutput(), subRegion);
while(!it.IsAtEnd())
{
unsigned char *inSI = it.BeginSpan();
unsigned char *inSIEnd = it.EndSpan();
while(inSI != inSIEnd)
{
*inSI = 255-*inSI;
++inSI;
}
it.NextSpan();
}
vtkSmartPointer<vtkImageViewer2> imageViewer =
vtkSmartPointer<vtkImageViewer2>::New();
imageViewer->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
imageViewer->SetupInteractor(renderWindowInteractor);
imageViewer->Render();
imageViewer->GetRenderer()->ResetCamera();
imageViewer->Render();
imageViewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
imageViewer->SetSize(640, 480);
imageViewer->GetRenderWindow()->SetWindowName("VisitImagePixelIterativelyExample");
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}

2017年09月13日 08点09分
1
#include "stdafx.h"
#include <vtkSmartPointer.h>
#include <vtkImageViewer2.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkBMPReader.h>
#include <vtkImageData.h>
#include <vtkImageIterator.h>
#include <vtkDICOMImageReader.h>
#include <vtkImageCast.h>
int main(int argc, char* argv[])
{
if (argc < 1)
{
std::cout<<argv[0]<<" "<<"ImageFile(*.bmp)"<<std::endl;
return EXIT_FAILURE;
}
/*vtkSmartPointer<vtkBMPReader> reader =
vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName ( "C:\\Users\\dell\\Desktop\\lena.bmp" );
reader->Update();*/
vtkSmartPointer<vtkDICOMImageReader> reader =
vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetFileName("G:\\VTK\\QQmyp\\head\\head");//连续二维dicom图像
reader->Update();
vtkSmartPointer<vtkImageCast>imagecast=
vtkSmartPointer<vtkImageCast>::New();
imagecast->SetInput((vtkDataObject*)reader->GetOutput());
imagecast->SetOutputScalarTypeToUnsignedChar();
imagecast->Update();
int subRegion[6] = {50,100, 50, 100, 50, 100};
vtkImageIterator<unsigned char> it(reader->GetOutput(), subRegion);
while(!it.IsAtEnd())
{
unsigned char *inSI = it.BeginSpan();
unsigned char *inSIEnd = it.EndSpan();
while(inSI != inSIEnd)
{
*inSI = 255-*inSI;
++inSI;
}
it.NextSpan();
}
vtkSmartPointer<vtkImageViewer2> imageViewer =
vtkSmartPointer<vtkImageViewer2>::New();
imageViewer->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
imageViewer->SetupInteractor(renderWindowInteractor);
imageViewer->Render();
imageViewer->GetRenderer()->ResetCamera();
imageViewer->Render();
imageViewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
imageViewer->SetSize(640, 480);
imageViewer->GetRenderWindow()->SetWindowName("VisitImagePixelIterativelyExample");
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
