Решено Воссоздание изображения из массива Y Cb Cr numpy Python - PullRequest
1 голос
/ 28 марта 2020

У меня есть 3 numpy массивов с Y, Cb и Cr. Я смог показать их по отдельности, и теперь я хочу объединить их и показать результат. Я пробовал это:

Y, Cb, Cr = somefunction() //returns 3 numpy.ndarrays

print(Y.shape)  //(160, 160)
print(Y.dtype)  //float64
print(Cb.shape) //(160,160)
print(Cb.dtype) //float32
print(Cr.shape) //(160,160)
print(Cr.dtype) // float32

img_Y = im.fromarray(Y, mode=None)
img_Cb = im.fromarray(Cb, mode=None)
img_Cr = im.fromarray(Cr, mode=None)

im.merge('YCbCr', (img_Y, img_Cb, img_Cr))

, но я получаю эту ошибку:

    im.merge('YCbCr', (img_Y, img_Cb, img_Cr))
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\PIL\Image.py", line 2957, in merge
    raise ValueError("mode mismatch")
ValueError: mode mismatch

, исправляя это:

Y = Y.astype(int).astype('uint8')
Cb = Cb.astype(int).astype('uint8')
Cr = Cr.astype(int).astype('uint8')

img_Y = im.fromarray(Y)
img_Cb = im.fromarray(Cb)
img_Cr = im.fromarray(Cr)

im.merge('YCbCr', (img_Y, img_Cb, img_Cr)).show()

1 Ответ

0 голосов
/ 29 марта 2020

Вы не можете объединить float64 Y-канал с float32 Cb / Cr-каналами, и PIL не поддерживает никакие пространства цветов (режимы) с более чем одним 32-битным плавающим каналом .

Итак, вам нужно будет масштабировать ваши значения в диапазоне 0..255 и преобразовать в uint8, как показано выше по ссылке, чтобы go превратилось в YCbCr пространство цвета.

...