我想为每个像素编写一个基于红色、绿色和蓝色 channel 的点过滤器,但似乎这可能达不到 point()
的能力——它似乎对单个 channel 中的单个像素进行操作一次。我想做这样的事情:
def colorswap(pixel):
"""Shifts the channels of the image."""
return (pixel[1], pixel[2], pixel[0])
image.point(colorswap)
有没有一种等效的方法可以让我使用一个过滤器来接收 RGB 值的 3 元组并输出一个新的 3 元组?
最佳答案
您可以使用 load
方法快速访问所有像素。
def colorswap(pixel):
"""Shifts the channels of the image."""
return (pixel[1], pixel[2], pixel[0])
def applyfilter(image, func):
""" Applies a function to each pixel of an image."""
width,height = im.size
pixel = image.load()
for y in range(0, height):
for x in range(0, width):
pixel[x,y] = func(pixel[x,y])
applyfilter(image, colorswap)
关于python - PIL 中是否有 Image.point() 方法可以让您一次对所有三个 channel 进行操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4529515/