将Ycbcr的不同通道保存为单独的图像|蟒蛇

时间:2016-10-09 03:05:06

标签: python python-imaging-library color-space

我需要对Ycbcr颜色空间的各个通道应用一些转换。

我有一个tiff格式图像作为源,我需要将其转换为ycbcr颜色空间。我无法将不同的频道成功保存为单独的图像。我只能使用以下代码提取发光通道:

delivery = Selector(response).xpath('//*[@id="ddmDeliveryMessage"]').extract()[0]
delivery = self.rx.sub(' ', re.sub(r'<[^>]*?>', '', delivery).replace("\n","")).strip()

有人可以帮忙。

谢谢

2 个答案:

答案 0 :(得分:1)

这是我的代码:

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()

答案 1 :(得分:0)

只需使用.split()方法将图像拆分为不同的通道(在PIL中称为 band )。不需要使用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))