首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python映像: YCbCr问题

Python映像: YCbCr问题
EN

Stack Overflow用户
提问于 2010-05-09 16:48:57
回答 2查看 5.8K关注 0票数 5

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

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

代码语言:javascript
复制
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中的相同代码完全按照我的预期工作。

EN

回答 2

Stack Overflow用户

发布于 2010-05-10 00:32:13

由于YCbCr是一个simple,从数学上讲是从RGB色彩空间determinate conversion的,所以通过YCbCr的中间阶段只是从图像中提取计算的(而不是绝对的)亮度值的一种间接方式。您可以使用以下命令更直接地完成相同的任务:

代码语言:javascript
复制
yIm = pengIm.convert('L')

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

代码语言:javascript
复制
>>> 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

所有操作都如预期的那样工作。顺便说一句,

代码语言:javascript
复制
>>> 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')

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

票数 5
EN

Stack Overflow用户

发布于 2013-12-18 22:12:27

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

代码语言:javascript
复制
ycbcr_array = numpy.ndarray((pengIm.size[1], pengIm.size[0], 3), 'u1', yIm.tostring())

我发现它是here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2797102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档