python - 如何使用 Pillow 的 Image.load() 函数生成蒙版

标签 python image-processing python-imaging-library image-manipulation

我想根据某些像素值创建一个 mask 。例如:B > 200 的每个像素

Image.load() 方法似乎正是我用这些值识别像素所需要的方法,但我似乎无法弄清楚如何获取所有这些像素并从中创建蒙版图像。

            R, G, B = 0, 1, 2

            pixels = self.input_image.get_value().load()
            width, height = self.input_image.get_value().size

            for y in range(0, height):
                for x in range(0, width):
                    if pixels[x, y][B] > 200:
                        print("%s - %s's blue is more than 200" % (x, y))
``

最佳答案

我的意思是让你避免 for 循环而只使用 Numpy。因此,从这张图片开始:

enter image description here

from PIL import Image
import numpy as np

# Open image
im = Image.open('colorwheel.png')

# Make Numpy array
ni = np.array(im)

# Mask pixels where Blue > 200
blues = ni[:,:,2]>200

# Save logical mask as PNG
Image.fromarray((blues*255).astype(np.uint8)).save('result.png')

enter image description here

如果你想让蒙版像素变黑,使用:

ni[blues] = 0
Image.fromarray(ni).save('result.png')

enter image description here


您可以针对这样的范围进行更复杂的复合测试:

#!/usr/bin/env python3

from PIL import Image
import numpy as np

# Open image
im = Image.open('colorwheel.png')

# Make Numpy array
ni = np.array(im)

# Mask pixels where 100 < Blue < 200
blues = ( ni[:,:,2]>100 ) & (ni[:,:,2]<200)

# Save logical mask as PNG
Image.fromarray((blues*255).astype(np.uint8)).save('result.png')

enter image description here

您还可以对红色、绿色和蓝色设置条件,然后使用 Numpy 的 np.logical_and()np.logical_or() 设置复合条件,例如:

bluesHi = ni[:,:,2] > 200 
redsLo  = ni[:,:,0] < 50

mask = np.logical_and(bluesHi,redsLo)

关于python - 如何使用 Pillow 的 Image.load() 函数生成蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942102/

相关文章:

python - 使用 Intel MKL 计算 `trans(a)*inv(b)*a` 的正确方法(后续问题)

python - 为什么这是 python 中的无限循环?

python - key 错误 : 'oauth_state'

c - 在C中通过http将图像发送到浏览器

python - 如何使用opencv(python),simplecv或pil进行图像拼接?

python - 共享资源时如何避免python线程中的全局?

python - 如何使用 Keras 进行离线图像增强?

每次旋转后 PHP 图像旋转都会失去质量

python - 覆盖 PIL 中的图像而不是打开新窗口

python - 使用 OpenCV 将一定范围内的颜色更改为另一种颜色