преобразовать изображение uint16 dicom в qimage

я попытался преобразовать изображение dicom, считанное с устройства чтения изображений gdcm, которое имеет фотометрическую интерпретацию как «monochrome2» и формат пикселей как unsigned int 16 или uint16, я попробовал следующий код поверх него, но не дает требуемое изображение, пожалуйста, помогите.

        QVector<QRgb> table(2);
        for(int c=0;c<256;c++)
        {
            table.append(qRgb(c,c,c));
        }
        std::cout << "this is the format UINT16" << std::endl;
        int size = dimX*dimY*2; // length of data in buffer, in bytes
        quint8 * output = reinterpret_cast<quint8*>(buffer);
        const quint16 * input = reinterpret_cast<const quint16*>(buffer);
        do {
            *output++ = (*input) >> 8;
        } while (size -= 2);
        imageQt = new QImage(output, dimX, dimY, QImage::Format_Indexed8);
        imageQt->setColorTable(table);

С Уважением


person Srijan Tiwari    schedule 26.06.2012    source источник
comment
Как выглядит ваш ввод и вывод? Немного больше информации было бы удобно. Очевидно, вы уменьшаете цветовое разрешение, поэтому ваше окончательное изображение будет выглядеть не так хорошо, как оригинал, но само по себе это не должно быть большой проблемой (хотя дизеринг может помочь).   -  person Goz    schedule 26.06.2012


Ответы (1)


Кажется, я вижу твою проблему. Вы записываете данные для вывода и увеличиваете указатель на вывод по мере продвижения.

Затем вы создаете QImage, указывающий на конец растрового изображения.

Вам необходимо сделать следующее:

imageQt = new QImage( reinterpret_cast< uchar* >( buffer ), dimX, dimY, QImage::Format_Indexed8);

Изменить: также вы не продвигаете указатель ввода.

Вам нужно изменить свой внутренний цикл на следующее:

*output++ = (*input++) >> 8;
person Goz    schedule 26.06.2012