vtk对序列图片读取支持多种方式
1、将序列图像的路径及名称保存到vtkStringArray,最后再一起读取
//生成图像序列的文件名数组
vtkSmartPointer< vtkStringArray > fileArray = vtkSmartPointer< vtkStringArray >::New();
char fileName[128];
for(int i = 1; i < 100; i++)
{
sprintf(fileName, "../data/Head/head%03d.jpg", i);
vtkstd::string fileStr(fileName);
fileArray->InsertNextValue(fileStr);
}
//读取JPG序列图像
vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileNames(fileArray);
2、使用Reader类里的SetFilePrefix和SetFilePattern等方法读取序列图
vtkSmartPointer<vtkJPEGReader>reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFilePrefix ("../data/Head/head");
reader->SetFilePattern("%s%03d.jpg");
reader ->SetDataExtent (0,255,0,255,1,100);
reader->Update();
3、先一张张图像读取,最后再一起合并为三维
vtkSmartPointer<vtkImageAppend> append = vtkSmartPointer<vtkImageAppend >::New();
append->SetAppendAxis(2);
vtkSmartPointer<vtkJPEGReader>reader = vtkSmartPointer<vtkJPEGReader>::New();
char fileName[128];
for(int i = 1; i < 21; i++)
{
sprintf(fileName,"../data/Head/head%03d.jpg", i);
reader->SetFileName(fileName);
append->AddInputConnection(reader->GetOutputPort());
}
需要注意的是:
方式3读取后的图像好像变少了,不知什么原因导致的,后续有时间再排查。