好吧,标题很容易说明。我有一个图像文件,我想分别分成Y,Cb和Cr。打开文件后,将其从RGB(打开图像文件时的默认模式)转换为YCbCr,然后使用numpy.array()将其转换为数组,从而生成具有4个 channel 的2D数组,我期望根据http://www.nmt.edu/tcc/help/pubs/pil/pil.pdf中的文档
这是我在解释器中所做的:
ImageFile = Image.open('filePath', 'r')
ImageFile = ImageFile.convert('YCbCr')
ImageFileYCbCr = numpy.array(ImageFile)
ImageFileYCbCr
导致
array([[[103, 140, 133, 95],
[140, 133, 91, 141],
[132, 88, 141, 131],
...,
[129, 65, 146, 129],
[ 64, 146, 130, 65],
[146, 129, 64, 147]],
[[129, 64, 147, 129],
[ 62, 149, 130, 62],
[149, 130, 62, 149],
...,
当我将其分为 channel 时
ImageFileY = copy.deepcopy(ImageFileYCbCr) # to make a separate copy as array is immutable
ImageFileY[:,:,1] *= 0
ImageFileY[:,:,2] *= 0
ImageFileY[:,:,3] *= 0
ImageFileYOnly = Image.fromarray(ImageFileY)
ImageFileYOnly.show()
它产生一个红色 channel ,就好像它是RGB一样。我怎样才能分别获得Y,Cb,Cr值?
编辑:Numpy版本1.3,Python 2.6 Linux回溯5
最佳答案
https://mail.python.org/pipermail/image-sig/2010-October/006526.html
这是Numpy的一个老错误。更正它
>>> import numpy
>>> import Image as im
>>> image = im.open('bush640x360.png')
>>> ycbcr = image.convert('YCbCr')
>>> B = numpy.ndarray((image.size[1], image.size[0], 3), 'u1', ycbcr.tostring())
>>> print B.shape
(360, 640, 3)
>>> im.fromarray(B[:,:,0], "L").show()
关于python - PIL图像从RGB转换为YCbCr的结果是4个 channel ,而不是3个 channel ,并且表现得像RGB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24610775/