使用PIL和图像.poin

2024-05-16 01:10:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我好像不明白图像点的作用。我想做一些像素编辑,可能包括检查每个像素中哪个颜色值(r、g或b)是最大值,并相应地进行操作。假设我不能用纽比。我设法使用图像点为图像中的每个像素添加相同的值。 点代码

import Image, math

def brightness(i, value):
value = math.floor(255*(float(value)/100))
return i+value

if __name__ == '__main__':
    image = '/home/avlahop/verybig.jpg'
    print image
    img = Image.open(image)
    print img
    out = img.point(lambda i: brightness(i, 50))
    out.show()

纽比码

^{pr2}$

我不得不说点代码比numpy的快,但是如果我想用point做一个更复杂的操作呢。例如,对于每个像素,检查max(r,g,b),并根据r=max或g=max或b=max做一些事情。只需要一个论点,这是什么?是像素吗?(即i=(r,g,b)?)。我似乎无法从pil文档中理解


Tags: 代码图像image编辑imgvalue颜色math
1条回答
网友
1楼 · 发布于 2024-05-16 01:10:26

在PIL的早期版本中,文档可能并不清楚,但在Pillow中,它的拼写非常清楚。来自^{}

^{bq}$

换句话说,它不是一个通用的方法来映射每个像素通过一个函数,它只是一种动态构建查找表的方法,而不是传递一个预先构建的查找表。在

换句话说,它是用从0255的数字来调用的。(只需编写一个函数,将其参数附加到一个全局列表中,然后在结尾处转储该列表,您就可以很容易地找到它。)

如果你把你的图像分割成不同的波段或平面,point每一个都有不同的功能,然后重新组合它们,这样就可以完成你想做的事情了。但即便如此,我认为^{}是你想要的,而不是{}。在

但我认为你真正想要的是一个逐像素的所有波段同时迭代器。你不需要什么特别的东西。只需使用map或对^{}的理解。不是很慢吗?当然它很慢,因为它调用你的函数X*Y次;构建getdata序列并对其进行迭代的成本与此成本相比微不足道,因此为PIL寻找一种方法来优化已经足够快的部分不会让你走得太远。在

相关问题 更多 >