2012-03-18 101 views
2

我想在Python中使用PIL来删除部分基于像素RGB值的图像。从文档看来,功能点可以做我正在寻找的东西。但是,我很难跟踪文档。如果我想将蓝色值小于100的所有像素更改为白色,那么实现此目的最简单的方法是什么?Python PIL基于其颜色删除图像的部分

回答

1

像下面将工作:

source = im.split() 
mask = source[2].point(lambda i: i < 100 and 255) 
im = Image.merge(im.mode, source) 

PIL Tutorial点运算走向更多资料。

2

我认为最简单的方法是使用Mahotas library,它可以让你把图像加载到NumPy程序。然后你可以在你的图像上使用逻辑索引。

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的工作流程。