Python PIL根据图像的颜色删除图像的部分
我试图在python中使用PIL来删除基于像素RGB值的部分图像。从文档中可以看出,功能点可以完成我想要的功能。然而,我很难遵循文档。如果我想将所有蓝色值小于100的像素更改为白色,最简单的方法是什么?我认为最简单的方法是使用,它可以将图像加载为NumPy ndarray。然后,您可以对图像使用逻辑索引Python PIL根据图像的颜色删除图像的部分,python,python-imaging-library,Python,Python Imaging Library,我试图在python中使用PIL来删除基于像素RGB值的部分图像。从文档中可以看出,功能点可以完成我想要的功能。然而,我很难遵循文档。如果我想将所有蓝色值小于100的像素更改为白色,最简单的方法是什么?我认为最简单的方法是使用,它可以将图像加载为NumPy ndarray。然后,您可以对图像使用逻辑索引 import Mahotas as mh import numpy as np fname = "/home/stuff/images/my_image.jpg" image = mh
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]
将Mahota作为mh导入
将numpy作为np导入
fname=“/home/stuff/images/my_image.jpg”
image=mh.imread(fname)
#制作一份副本以播放索引。
img=np.copy(图像)
#将第三坐标小于100的位置替换为白色
#向量[255,255,255]。
inds=img[:,:,2]<100
img[inds]=[255255]
好处是Mahotas将图像直接加载到Numpy数组中,这使您可以轻松地以Numpy一致的语法分割不同的维度。或者,如果您真的想使用PIL进行映像I/O,那么您应该在PIL中查找允许您将映像转换为NumPy数组的函数,然后上面的代码仍然可以工作
但总的来说,要让PIL真正发挥作用,我一直都有一些问题。PIL似乎总是存在某种图像文件类型支持问题、解码器问题或其他问题。它很挑剔。出于同样的原因,我通常会避免使用Python OpenCV。我更喜欢使用scikits.learn、scikits.image、Mahotas和PyPNG的工作流。类似于以下内容的工作流程可以:
source = im.split()
mask = source[2].point(lambda i: i < 100 and 255)
im = Image.merge(im.mode, source)
source=im.split()
掩码=源[2]。点(λi:i<100和255)
im=Image.merge(im.mode,source)
有关更多信息,请参阅点操作标题下的