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

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

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]

0

Решение

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector