2012-06-04 27 views
0

我使用拜耳过滤器创建图像,并且颜色稍微偏离。我需要将每个像素的RG和B乘以某个因子(R,G和B各不相同)以获得正确的颜色。我使用python图像库,当然用python编写。有什么办法可以有效地做到这一点?将图像中的每个像素乘以因子

谢谢!

回答

4

这里是如何做到这一点:

  1. 先拆你的图像转换成RGB通道。
  2. 使用point将一个通道乘以一个因子(示例中为1.5,在r通道上)。
  3. 合并频道。

赫雷什的代码:

import Image 
im = Image.open('1_tree.jpg') 
im = im.convert('RGB') 
r, g, b = im.split() 
r = r.point(lambda i: i * 1.5) 
out = Image.merge('RGB', (r, g, b)) 
out.show() 

原:

enter image description here

随着红色通道乘以1.5(其有点更红..):

enter image description here

+0

好的是告诉我_imaging C模块没有安装?你知道有什么快速的方法来解决这个问题吗?我有我的电脑上的文件,但它没有找到它 – clifgray

+0

@clifgray,你有没有使用PIL的其他?附:我不认为有必要导入ImageChops。 –

+0

谢谢马克,我有,但后来我更新了它,它没有工作。我现在通过卸载并重新安装它,现在可以开始工作了。我认为我的口译员没有添加PIL库 – clifgray

0

从文档:

from PIL import Image 
Image.eval(image, function) => image 

适用的功能(这应该采取一个参数),以给定的图像中的每个像素。如果图像具有多个频段,则相同的功能适用于每个频段。请注意,函数针对每个可能的像素值进行一次评估,因此您不能使用随机组件或其他生成器。

+1

由于每个频段使用相同的功能,因此这将不起作用。 –

2

作为基本优化,如果创建3个查找表(每个用于R,G和B)将输入值(0-255)映射到输出值(0-255) )。查找数组条目可能比乘以十进制值并将结果四舍五入为整数更快。不知道有多快。

当然,这假定值应该总是映射相同。

1

您可以使用.split将图像拆分为三个通道中的每一个的单独图像,.eval分别为suggested by astynaxImage.merge以将它们重新放回到一起。

如果您的倍增系数是大于1,务必将输出电压钳位到255

相关问题