Python 如何查找和修改像素';使用PIL&x27;s im.point()?

Python 如何查找和修改像素';使用PIL&x27;s im.point()?,python,image,python-imaging-library,Python,Image,Python Imaging Library,我有一个图像(使用img=ImageGrab.grab(box))获取),我希望将具有特定RGB值(精确地说是RGB(74,38,63))的所有像素替换为白色,其余像素替换为黑色 问题是,图像是RGB格式的,如果它是在单个波段中(正如我在程序前面所做的那样),我可以使用:img2=img.point(lambda i:i>254和255)但这不适用于rgb图像,img.point中的i似乎不是3整数的元组(正如我所希望的那样),只是0到255的数字(如果我没有搞砸的话) 注意,我不想使用.ge

我有一个图像(使用
img=ImageGrab.grab(box)
)获取),我希望将具有特定RGB值(精确地说是RGB(74,38,63))的所有像素替换为白色,其余像素替换为黑色

问题是,图像是RGB格式的,如果它是在单个波段中(正如我在程序前面所做的那样),我可以使用:
img2=img.point(lambda i:i>254和255)
但这不适用于rgb图像,img.point中的
i
似乎不是3整数的元组(正如我所希望的那样),只是0到255的数字(如果我没有搞砸的话)



注意,我不想使用
.getpixel()
方法,因为它对于我想要做的事情来说太慢了


解决我的问题的另一种方法是使用img.load(),然后自己处理像素矩阵,但我不知道这有多有效。

Numpy对于通用的快速和特定像素操作非常有效。下面是一个例子:

import Image
import numpy as np
import matplotlib.pyplot as plt

im = Image.open("python.jpg")
a = np.asarray(im)

b = np.where(np.all(((a>[240, 40, 20]) * (a<=[255, 255, 150])), axis=2, keepdims=True), [80,0,0], [0,0,90])

plt.figure()
plt.subplot(1,2,1)
plt.imshow(a)
plt.subplot(1,2,2)
plt.imshow(b)
plt.show()

导入图像
将numpy作为np导入
将matplotlib.pyplot作为plt导入
im=Image.open(“python.jpg”)
a=np.asarray(im)
b=np.where(np.all((a>[240,40,20])*(a
),并且只使用一个条件。此外,我使用matplotlib可以方便地将输出和输入显示在一起,但您也可以使用
image.fromarray(b.astype(np.uint8))
将其转换回图像

如果您想应用一些简单的标准过滤器,或者使用本地
getpixel
操作,保持纯PIL将很好,但是对于大多数图像的数字处理,numpy或图像处理软件包是一种不错的选择