#include <itkImage.h>
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkImageRegionIterator.h>
#include <itkMetaDataDictionary.h>
#include <itkMetaDataObject.h>
#include <vtkMetaImageReader.h>
#include <vtkMetaImageWriter.h>
#include <vtkImageAppend.h>
#include <vtkImageChangeInformation.h>
#include <vtkSmartPointer.h>
#include <vtkImageData.h>
bool loadImageData(const char* fileName,
vtkSmartPointer<vtkImageData>& imageData) {
auto imageReader = vtkSmartPointer<vtkMetaImageReader>::New();
if (!imageReader->CanReadFile(fileName)) {
imageData = nullptr;
// LOG_ERROR( "loadImageData(vtkMetaImageReader) cannot read file: " << fileName);
return false;
}
imageReader->SetFileName(fileName);
imageReader->Update();
imageData = imageReader->GetOutput();
return true;
}
int main(int, char *[]) {
vtkNew<vtkImageAppend> append;
append->SetAppendAxis(2);
// for loop
std::string path =
"/mha/";
//000001.mha 000243.mha
for (int i=1; i<=243;++i){
std::string fileName("000000");
fileName += std::to_string(i);
fileName = fileName.erase(0, fileName.length() - 6);
fileName = path + fileName + ".mha";
std::cout << fileName << "\n";
vtkSmartPointer<vtkImageData> imageData;
loadImageData(fileName.c_str(), imageData);
vtkNew<vtkImageChangeInformation> filter;
//filter->SetInputData((vtkDataObject*)(imageData.Get()));
filter->SetInputData((vtkDataObject*)&imageData);
filter->SetOutputExtentStart(0, 0, 0);
filter->SetOutputOrigin(0, 0, 0);
filter->Update();
append->AddInputData((vtkDataObject*)filter->GetOutput());
}
append->Update();
// save
vtkImageData *imageData = append->GetOutput();
auto imageWriter = vtkSmartPointer<vtkMetaImageWriter>::New();
imageWriter->SetFileName("merged.mhd");
imageWriter->SetInputData((vtkDataObject*)imageData);
imageWriter->SetCompression(true);
try {
imageWriter->Write();
} catch (std::exception& e) {
//LOG_ERROR("writeImageData(vtkMetaImageWriter) cannot write file: " << fileName << ", " << e.what());
return -1;
}
}
VTK合并mhd文件
最新推荐文章于 2023-09-13 18:31:28 发布