Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > DICOM->OpenCV


Автор: gendalf7771 28.4.2014, 13:18
Доброго времени суток!

Есть файл DICOM с одним изображением КТ брюшной полости. По факту - изображение в градациях серого по два байта на пиксель (-32768 - чёрный, 32767 - белый), то бишь signed short. Вот само изображение:
user posted image

Надо его отдать OpenCV на "хирургический стол" для всяких злодеяний типа распознавания контуров. Для препарирования DICOM использую GDCM.

Как я это делаю.
Код

char *dcmBuffer = new char[dcmImage.GetBufferLength()];
dcmImage.GetBuffer(dcmBuffer);
short *shdcmBuffer=reinterpret_cast<short*>(dcmBuffer);
//shdcmBuffer указывает на short исходного изображения

IplImage* cvImage = cvCreateImage(cvSize(gdcmImage.GetRows(),gdcmImage.GetColumns()),IPL_DEPTH_16S,1);
//IPL_DEPTH_16S - новое изображение тоже signed short

for(int y=0;y<gdcmImage.GetRows();++y)
{
    short *cvBuffer = reinterpret_cast<short*>(cvImage->imageData+y*cvImage->widthStep),
        *pcvBuffer=cvBuffer;//cvBuffer указывает на начало y-ой строки cvImage
    for(int x=0;x<gdcmImage.GetColumns();++x)
        *pcvBuffer++ = *shdcmBuffer++;
}


После этих махинаций получаю вот это:
user posted image

Подскажите, что я делаю не так?

Автор: gendalf7771 7.5.2014, 18:14
Уже не актуально, можно удалять.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)