我正在尝试阅读并以原始格式保存DICOM系列。在运行时,程序崩溃并生成以下错误:
这是我的代码:
int main(int argc, char* argv[])
{
// Verify input arguments
std::string folder = "C:/dicom decompress/GM_23/2801/0";
//std::string folder = "C:\\VTK\\vtkdata-5.8.0\\Data\\DicomTestImages";
// Read all the DICOM files in the specified directory.
vtkSmartPointer<vtkDICOMImageReader> reader =
vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetDirectoryName(folder.c_str());
reader->Update();
vtkSmartPointer<vtkImageWriter> writer = vtkSmartPointer<vtkImageWriter>::New();
writer->SetInputConnection(reader->GetOutputPort());
// writer->SetFilePrefix(folder.c_str());
writer->SetFilePattern("3d.raw");
writer->Write();
writer->Update();
return EXIT_SUCCESS;
}
最佳答案
可能是您的应用程序在该目录中找到了不是DICOM的文件(如果您使用的是Mac,请考虑目录中是否也包含隐藏文件,如“.DS_Store”。
我能想到的最好方法是处理有关文件解析的异常。
查看类vtkDicomImageReader,有一个名为 CanReadFile 的方法,似乎是该错误的处理程序,贯穿以下代码段:
bool canRead = this->Parser->IsDICOMFile();
if (canRead)
{
return 1;
}
else
{
vtkErrorMacro("DICOMParser couldn't parse : " << fname);
return 0;
}
该方法 protected ,但是您可以派生该类并按照自己喜欢的方式处理异常。
另外请注意,您还可以使用以下方法避免VTK警告窗口
(至少最终用户不会看到它),但是处理异常始终是最优先的事情。
让我知道是否有帮助。
关于c++ - 如何使用VTK保存原始的DICOM系列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18039770/