覆盖numpy数组中的像素

时间:2019-10-05 19:45:28

标签: python numpy image-processing

我有一张图片,我试图用任意颜色(例如蓝色)替换像素。我该如何使用数组。例如,我的图片是:

a b c d e
f g h i j
k l m n o
p q r s t
u v w x y

我想更改第3、2、3、4、3列的颜色,以使我的图像变成类似

a b c * e
f g * i j
k l m * o
p q r s *
u v w * y

其中*是用蓝色替换的像素。那怎么办?

1 个答案:

答案 0 :(得分:1)

由于您未指定任何限制,因此我认为任何工具都可以,所以我建议使用Pillow。 (使用pip install Pillow安装)

假设您的图片命名为image.png,然后您就可以遍历要编辑的像素并将每个位置的颜色设置为所需的颜色。

from PIL import Image

replacement_color = (0, 0, 255)
columns = [3, 2, 3, 4, 3]
positions = [(x, y) for y, x in enumerate(columns)]

image = Image.open('image.png')
pixels = image.load()

for (x, y) in positions:
    pixels[x, y] = replacement_color

image.show() # or image.save('transformed_image.png')

请注意,这种访问和编辑单个像素的方法可能会非常慢。


编辑:

使用布尔值numpy数组作为掩码来标识您也可以使用的正确像素

import numpy as np
from PIL import Image

image = Image.open('image.png')
image_array = np.array(image)

# Just an example mask
diagonal = np.eye(image_array.shape[0], image_array.shape[1])
mask = diagonal == 1

image_array[mask] = [0, 0, 255, 0] # RGBA

altered_image = Image.fromarray(image_array)
altered_image.save('altered_image.png')

(改编自this guide

我不确定性能是否会更好。

相关问题