【问题标题】:Python PIL remove sections of an image based on its colourPython PIL 根据其颜色删除图像的部分
【发布时间】:2012-04-03 01:03:15
【问题描述】:

我正在尝试在 python 中使用 PIL 根据像素 RGB 值删除部分图像。从文档看来,功能点可以做我正在寻找的东西。但是,我很难遵循文档。如果我想将所有蓝色值小于 100 的像素更改为白色,那么最简单的方法是什么?

【问题讨论】:

    标签: python python-imaging-library


    【解决方案1】:

    类似以下的方法会起作用:

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

    请参阅 Point Operations 标题下的 PIL Tutorial 了解更多信息。

    【讨论】:

      【解决方案2】:

      我认为最简单的方法是使用Mahotas library,它可以让您将图像加载为 NumPy ndarray。然后你就可以在你的图片上使用逻辑索引了。

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

      【讨论】:

        猜你喜欢
        • 2014-02-08
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        • 2020-06-03
        • 1970-01-01
        • 2011-06-07
        相关资源
        最近更新 更多