如何将深度为 17 的 DicomImage(Dcmtk) 转换为 Mat(Opencv) 对象?
How to convert a DicomImage(Dcmtk) with depth=17 to a Mat(Opencv) object?
使用此代码时,我没有得到想要的结果(见图)。
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 或者其他),它们之间有什么区别,我必须使用位掩码来防止其余高位出现垃圾,我该怎么做?
[
渲染图像的问题不是 16 位与 17 位深度(因为您已指定始终获得 16 位),而是您没有选择合适的 VOI window,例如通过在 image->getOutputData()
.
之前调用 image->setMinMaxWindow()
使用此代码时,我没有得到想要的结果(见图)。
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 或者其他),它们之间有什么区别,我必须使用位掩码来防止其余高位出现垃圾,我该怎么做?
[
渲染图像的问题不是 16 位与 17 位深度(因为您已指定始终获得 16 位),而是您没有选择合适的 VOI window,例如通过在 image->getOutputData()
.
image->setMinMaxWindow()