如何使用VTK原始保存DICOM系列
How to save a DICOM series raw with VTK
我正在尝试以原始形式读取并保存DICOM系列。在运行时,程序崩溃并生成以下错误:
DICOMParser无法解析。
这是我的代码:
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;
}
该方法是受保护的,但您可以派生该类并以您喜欢的方式处理异常。
另外,请注意,您也可以使用避开VTK警告窗口
vtkImageData::GlobalWarningDisplayOff();
(至少,最终用户不会看到这一点),但处理异常始终是最重要的事情。
如果这有帮助,请告诉我。
相关文章:
- 如何从dicom文件中读取二进制数据
- 从 c 或 cpp 系列子函数返回到主函数
- 在 Vulkan Qt 中获取队列系列
- QChart在使用QDateTimeAxis时不显示任何系列数据
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- 打印系列时循环出现问题
- 有关如何处理 vulkan 队列系列的问题
- Vulkan --- vkAcquireNextImageKHR 在使用某些队列系列时抛出 std::out_of_ra
- 对于非常大的输入,缺少和重复 1..n 的数字数组.使用1..n系列特性的解决方案.溢出问题
- 不同平台的 fstream 系列实现是否不同?
- 如何使用GDCM读取多帧DICOM文件?
- 统一位置和属性位置 - 是相同的数字系列吗?
- 协议不支持 C++ 地址系列
- Win32 C API:替代损坏的execl*()系列函数?
- 使用 vtkDICOMWriter 编写 DICOM 时访问读取冲突
- 无法使用imebra Android加载DICOM
- C 总和系列阶乘
- 如何使用Imebra库将压缩像素(用我自己的编码器压缩)回到DICOM图像文件中
- 在C 的COUT系列中创建一个空间
- 如何使用VTK原始保存DICOM系列