Потеря глубины пикселя при сохранении изображения PNG в C # - PullRequest
0 голосов
/ 03 июля 2018

Я создаю 16-битное изображение в градациях серого и сохраняю его в формате PNG, используя C #. Когда я загружаю изображение, используя GIMP или OpenCV, изображение появляется с точностью 8 бит вместо 16 бит. Вы знаете, что не так с моим кодом?

1) Этот код используется для создания PNG

 public static void Create16BitGrayscaleImage(int imageWidthInPixels, int imageHeightInPixels, ushort[,] colours,
        string imageFilePath)
    {
        // Multiplying by 2 because it has two bytes per pixel
        ushort[] pixelData = new ushort[imageWidthInPixels * imageHeightInPixels * 2];

        for (int y = 0; y < imageHeightInPixels; ++y)
        {
            for (int x = 0; x < imageWidthInPixels; ++x)
            {
                int index = y * imageWidthInPixels + x;
                pixelData[index] = colours[x, y];
            }
        }

        BitmapSource bmpSource = BitmapSource.Create(imageWidthInPixels, imageHeightInPixels, 86, 86,
            PixelFormats.Gray16, null, pixelData, imageWidthInPixels * 2);


        using (Stream str = new FileStream(imageFilePath, FileMode.Create))
        {
            PngBitmapEncoder enc = new PngBitmapEncoder();
            enc.Frames.Add(BitmapFrame.Create(bmpSource));
            enc.Save(str);
        }


    }

2) Это код Python для чтения свойств изображения:

import cv2
img = cv2.imread(image_path)

1 Ответ

0 голосов
/ 03 июля 2018

Следуя документации из cv2.imread(filename, flags), вы можете видеть, что есть необязательный флаг IMREAD_ANYDEPTH.

Флаг Документация описывает IMREAD_ANYDEPTH следующим образом:

Если установлено, вернуть 16-битное / 32-битное изображение, когда вход имеет соответствующую глубину, иначе преобразовать его в 8-битное.

Это означает, что imread(..) преобразует изображение в 8-битную глубину, если не указано иное.

Я ожидаю, что следующее загрузит изображение с 16-битной глубиной.

img = cv2.imread(image_path, cv2.IMREAD_ANYDEPTH)
...