Сохранить различные каналы Ycbcr как отдельные изображения | питон

Мне нужно применить некоторые преобразования к отдельным каналам цветового пространства Ycbcr.

У меня есть изображение в формате tiff в качестве источника, и мне нужно преобразовать его в цветовое пространство ycbcr. Мне не удалось успешно сохранить разные каналы как отдельные изображения. Я смог извлечь канал люминесценции только с помощью этого кода:

import numpy
import Image as im
image = im.open('1.tiff')
ycbcr = image.convert('YCbCr')

B = numpy.ndarray((image.size[1], image.size[0], 3), 'u1', ycbcr.tobytes())
im.fromarray(B[:,:,0], "L").show()

Может кто-нибудь, пожалуйста, помогите.

Спасибо


person Rochan Avlur    schedule 09.10.2016    source источник


Ответы (2)


Вот мой код:

import numpy
import Image as im
image = im.open('1.tiff')
ycbcr = image.convert('YCbCr')

# output of ycbcr.getbands() put in order
Y = 0
Cb = 1
Cr = 2

YCbCr=list(ycbcr.getdata()) # flat list of tuples
# reshape
imYCbCr = numpy.reshape(YCbCr, (image.size[1], image.size[0], 3))
# Convert 32-bit elements to 8-bit
imYCbCr = imYCbCr.astype(numpy.uint8)

# now, display the 3 channels
im.fromarray(imYCbCr[:,:,Y], "L").show()
im.fromarray(imYCbCr[:,:,Cb], "L").show()
im.fromarray(imYCbCr[:,:,Cr], "L").show()
person hesham_EE    schedule 09.10.2016

Просто используйте метод .split(). чтобы разделить изображение на разные каналы (называемые полосами в PIL). Нет необходимости использовать numpy.

(y, cb, cr) = ycbcr.split()
# y, cb and cr are all in "L" mode. 

После выполнения преобразований используйте PIL.Image.merge() чтобы снова объединить их.

ycbcr2 = im.merge('YCbCr', (y, cb, cr))
person kennytm    schedule 09.10.2016
comment
спасибо за объяснение, не знал о функции разделения. - person Rochan Avlur; 09.10.2016