如何将深度为17的DicomImage(Dcmtk)转换为Mat(Opencv)对象?

时间:2018-09-20 13:19:05

标签: c++ opencv dicom bitmask dcmtk

使用此代码时,我没有得到想要的结果(参见图片)。

DicomImage *image = new DicomImage("/home/000001.dcm");
cv::Mat inputImage(int(image->getHeight()), int(image->getWidth()), CV_16UC1, (uchar*)image->getOutputData(16));

因为图像的深度为17,如果将CV_16UC1更改为CV_32xx,我会得到一个无意义的图像。 显然,17位需要超过16位才能正确存储。 我的问题是,我应该使用哪种Opencv Map类型(CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4或其他),它们之间有什么区别,我是否必须使用位掩码来防止剩余的高位垃圾产生垃圾,我该如何使用?这样吗?

[Pictue]

1 个答案:

答案 0 :(得分:1)

渲染图像的问题不是16位深度与17位深度(因为您已指定始终获得16位),而是尚未选择合适的VOI窗口,例如通过在image->setMinMaxWindow()之前调用image->getOutputData()