我正在使用DCMTK阅读并希望修改DICOM图像。我有以下代码:
#include <iostream>
#include <opencv\cv.h>
#include <dcmtk\dcmimgle\dcmimage.h>
int main() {
try {
DicomImage* dicomImage = new DicomImage("C:/Users/Kriselle/Documents/000004.dcm");
if ((dicomImage != NULL) && (dicomImage->isMonochrome())) {
dicomImage->writeBMP("C:/Users/Kriselle/Documents/z.bmp", 8);
std::cout << "z.bmp is created" << std::endl;
}
else {
std::cout << "dicomImage is null or not monochrome" << std::endl;
}
}
catch (cv::Exception e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
我所做的只是创建一个DicomImage并将其像素数据写入一个BMP文件,其文件名是我指定的,但图像只返回一张灰色图像,原始图像的轮廓几乎无法识别。
这应该是这样的:https://www.dropbox.com/s/6dw8nlae8hfvqf6/000004.jpg?dl=0 这就是代码生成的内容:https://www.dropbox.com/s/fff2kch124bzjqy/z.bmp?dl=0
我是否遗漏了代码中的内容,或者我不明白该功能的作用?有谁能请赐教?非常感谢你!
答案 0 :(得分:1)
正如您可以在DicomImage类的API文档中读到的那样,默认情况下在渲染单色DICOM图像时不启用VOI转换。在您的情况下,这似乎不合适,因此您应指定更合适的VOI设置(例如min-max window)或使用VOI windows stored in the DICOM dataset之一(如果有)。
顺便说一下,在构造函数中加载图像之后,还应该使用getStatus()方法检查此过程的状态。