Python PIL根据颜色删除图像的部分

5

我正在尝试在Python中使用PIL根据像素RGB值删除图像的部分。从文档上来看,函数point似乎可以做到我想要的。然而,我很难理解文档内容。如果我想将所有蓝色值小于100的像素更改为白色,最简单的方法是什么?

2个回答

2
我认为最简单的方法是使用Mahotas库,它可以让你将图像加载为NumPy ndarrays。然后你只需要在图像上使用逻辑索引即可。
 import Mahotas as mh
 import numpy as np

 fname = "/home/stuff/images/my_image.jpg"
 image = mh.imread(fname)

 # Make a copy to play with the indices.
 img = np.copy(image)

 # Replace places with 3rd coordinate less than 100 with the white-color
 # vector [255, 255, 255].
 inds = img[:,:,2] < 100
 img[inds] = [255,255,255]

好处是Mahotas将图像直接加载到Numpy数组中,这使您可以轻松使用NumPy一致的语法对不同的维度进行分片。或者,如果您真的想用PIL进行图像I/O,则应查找PIL中让您将图像转换为NumPy数组的功能,然后上面的代码仍将起作用。
总的来说,我一直遇到过一些与PIL有关的问题。似乎总是会有某种图像文件类型支持问题、某个解码器问题或其他一些问题出现在PIL上。它非常挑剔。我通常尝试避免使用Python-OpenCV出于同样的原因。我更喜欢使用scikits.learn、scikits.image、Mahotas和PyPNG的工作流程。

2
以下类似的内容可以起作用:
source = im.split()
mask = source[2].point(lambda i: i < 100 and 255)
im = Image.merge(im.mode, source)

更多信息请参见点操作标题下的PIL教程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接