Я хотел бы прочитать изображения DICOM на C++ и манипулировать ими с помощью opencv.Прочтите DICOM в C++ и конвертируйте в OpenCV
Мне удалось прочитать изображение dicom, используя DCMTK, однако я не уверен, как преобразовать его в opencv Mat.
Ниже то, что я до сих пор:
DicomImage DCM_image("test.dcm");
cv::Mat image(int(DCM_image.getWidth()), int(DCM_image.getHeight()), CV_8U, (uchar*)DCM_image.getOutputData(8));
, что приводит к следующему:
В средстве просмотра DICOM, это выглядит следующим образом:
После нормализующее, посеревшую изображение выглядит следующим образом:
Любая помощь будет принята с благодарностью.
Я отдам его.Кроме того, нормализация должна выполняться до или после передачи данных в opencv? Если раньше, это нужно делать с помощью getOutputData? Спасибо – user3126802
Я думаю, что если вы выберете глубину соответствующим образом, нет никакой разницы. Кроме того, по моему опыту, у некоторых зрителей DICOM необычная нормализация, из-за чего данные выходят за пределы диапазона (структура на скриншоте выглядит совершенно белой, как и переэкспонированной). Поэтому, возможно, вы хотели бы нормализовать свои данные по-разному. – alexisrozhkov
Я создаю cv :: mat следующим образом: 'cv :: Mat test (int (DCM_image.getHeight()), int (DCM_image.getWidth()), CV_MAKETYPE (DCM_image.getDepth(), 1), (длинный *) DCM_image.getOutputData()); ' Однако выход по-прежнему не очень хорош. Любая идея почему? – user3126802