如何更改图像中给定索引的RGB值?这给了我一个空白的画面:
import numpy as np
from PIL import Image
target_image = Image.open("img.png")
target_image_array = np.array(target_image)
pixels = target_image_array.reshape(-1, 3)
skip_indices = np.arange(101_600, 254_000)
indices_to_grey_out = np.delete(pixels, skip_indices, 0)
pixels_greyed_out = pixels.copy()
pixels_greyed_out[indices_to_grey_out, [0, 1, 2]] = 0
pixels_greyed_out = pixels_greyed_out.reshape(target_image_array.shape)
modified_img = Image.fromarray(pixels_greyed_out)
modified_img.show()
2条答案
按热度按时间q3aa05251#
我不明白你到底想用扁平化和不连续的索引做什么,但是纯粹从你的评论来看,我理解你想影响图像中的一些特定颜色,所以我会尝试演示一下。
这是一个径向梯度图像,中心为
rgb(20, 50, 140)
,边缘为rgb(40, 70, 160)
,所以我碰巧知道有4,884个(非线性相邻,如果有关系的话)像素值为rgb(25,55,145)
现在,让我们打开它并将其变成一个Numpy数组:
现在我们可以使用遮罩来改变所选的像素。让我们在原始图像中将遮罩像素设置为红色:
现在使用蒙版的逆来影响未选中的像素。让我们把它们变成灰色:
如果要遮罩多个颜色,可以使用逻辑运算将遮罩组合在一起。所以,假设你想额外屏蔽颜色rgb(28,58,148),你可以在上面代码的末尾添加以下内容:
如果你想屏蔽一个颜色范围,我建议使用OpenCV
inRange()
,它可以让你设置R,G和B的下限和上限,然后选择中间的所有颜色。如果有人好奇我是如何开始制作径向渐变的,我在终端中使用了ImageMagick和以下命令:
一个更简单、更清晰的版本可能是:
ttygqcqt2#
如果你只想改变一个像素,你可以做以下的事情:
如果你想改变图像的一个切片,最好先将其更改为numpy,然后按如下方式更改值: