【问题标题】:Python Imaging: YCbCr problemsPython 成像:YCbCr 问题
【发布时间】:2010-05-09 08:48:57
【问题描述】:

我正在使用 PIL 在 Python 中进行一些图像处理,我需要从一系列图像中提取亮度层,并使用 numpy 对其进行一些处理,然后将编辑后的亮度层放回图像中并保存.问题是,我似乎无法以 YCbCr 格式获得任何有意义的图像表示,或者至少我不明白 PIL 在 YCbCr 中给了我什么。 PIL 文档声称 YCbCr 格式提供了三个通道,但是当我使用 np.asarray 从图像中获取数据时,我得到了 4 个通道。好的,所以我认为一个必须是 alpha。

这是我用来测试这个过程的一些代码:

import Image as im
import numpy as np    
pengIm = im.open("Data\\Test\\Penguins.bmp")
yIm = pengIm.convert("YCbCr")
testIm = np.asarray(yIm)

grey = testIm[:,:,0]
grey = grey.astype('uint8')
greyIm = im.fromarray(grey, "L")
greyIm.save("Data\\Test\\grey.bmp")

我期待我的图像的灰度版本,但我得到的是这个混乱的混乱:

http://i.imgur.com/zlhIh.png

谁能向我解释我哪里出错了? matlab 中的相同代码完全符合我的预期。

【问题讨论】:

标签: python python-imaging-library


【解决方案1】:

由于 YCbCr 是一个 simple,数学上来自 RGB 颜色空间的 determinate conversion,通过 YCbCr 的中间阶段只是从图像中提取计算(非绝对)亮度值的间接方式。您可以通过以下方式更直接地完成相同的操作:

yIm = pengIm.convert('L')

我怀疑您通过 numpy asarray 或 fromarray 或在您的 numpy 代码中的转换存在问题,因为序列:

>>> import Image
>>> import ImageOps
>>> import ImageChops
>>> c = Image.open('squished_levels.png')
>>> c
<PngImagePlugin.PngImageFile image mode=RGB size=320x240 at 0xB7686DAC>
>>> c.getbands()
('R', 'G', 'B')
>>> d = c.convert('L')
>>> d.getextrema()       # squished_levels.png has squished levels for testing
(77, 182)
>>> d.getbands()
('L',)
>>> e = ImageOps.equalize(d)
>>> e.getextrema()
(0, 255)
>>> f = e.convert('RGB')
>>> g = ImageChops.lighter(c, f)
>>> g.show()             # not  squished in luminance

一切都按预期工作。顺便说一句,

>>> h = c.convert('YCbCr')
>>> h
<Image.Image image mode=YCbCr size=320x240 at 0xB761378C>
>>> h.getpixel((0,0))
(119, 127, 128)
>>> h.getbands()
('Y', 'Cb', 'Cr')

给我三个频道,而不是四个。

【讨论】:

  • 谢谢,那么 Numpy asarray 就坏了。我想我应该自己尝试一下,但是谢谢。
  • @msw 有没有其他方法可以正确高效地获取数据数组
【解决方案2】:

如果像这样将图像转换成numpy数组,问题应该就解决了:

ycbcr_array = numpy.ndarray((pengIm.size[1], pengIm.size[0], 3), 'u1', yIm.tostring())

我找到了here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多