0

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

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 或其他),它们之间有什么区别,我是否必须使用位掩码来防止在其余高位中出现垃圾,我该如何去做?

[图】

4

1 回答 1

1

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

于 2018-09-21T07:13:14.870 回答