Как преобразовать DicomImage (Dcmtk) с глубиной = 17 в объект Mat (Opencv)? - PullRequest
0 голосов
/ 20 сентября 2018

При использовании этого кода я не получаю желаемый результат (см. Рисунок).

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 мне следует использовать (CV_32SC1, CV_32SC2, CV_32SC3, CV_32SC4 или другое), в чем разница между ними, нужно ли использовать битовую маску для предотвращения попадания мусора в остальные старшие биты и как я могу это сделать?сделать это?

[Pictue]

1 Ответ

0 голосов
/ 21 сентября 2018

Проблема с отображаемым изображением не в 16 против 17 бит (так как вы указали всегда получать 16 бит), но в том, что вы не выбрали соответствующее окно VOI, например, вызвав image->setMinMaxWindow() до image->getOutputData().

...