Python 更改像素透明背景

Python 更改像素透明背景,python,image,Python,Image,我有几个不同的图像,我想改变图像的每个透明像素到不同的颜色 我找到了一种提取图像透明像素的所有RGB值的方法,如下所示: data[data[:,:,3]==0,:3][0] 现在,当我尝试为该像素分配不同的阵列时,它不起作用: data[data[:,:,3]==0,:3][0] = np.array([255,0,255]) print(data[data[:,:,3]==0,:3][0]) Out[1]: [0 0 0] 如何更改此像素?更新的答案 我从你的评论中看到,你需要比我从你

我有几个不同的图像,我想改变图像的每个透明像素到不同的颜色

我找到了一种提取图像透明像素的所有RGB值的方法,如下所示:

data[data[:,:,3]==0,:3][0]
现在,当我尝试为该像素分配不同的阵列时,它不起作用:

data[data[:,:,3]==0,:3][0] = np.array([255,0,255])

print(data[data[:,:,3]==0,:3][0])
Out[1]: [0 0 0]

如何更改此像素?

更新的答案

我从你的评论中看到,你需要比我从你的问题中理解的更大的灵活性。试试这个:

In [85]: im = np.array(Image.open('image.png').convert('RGBA'))

In [86]: for x in np.argwhere(im[:,:,3]==0):
    ...:     im[x[0],x[1],:]=np.random.randint(0,255), np.random.randint(0,255), np.random.randint(0,255), np.random.randint(0,255)
原始答案

我想你的意思是:

In [32]: im = np.array(Image.open('image.png').convert('RGBA'))

In [33]: im
Out[33]: 
array([[[126, 126, 126, 255],        <--- grey pixel
        [126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255]],

       [[126, 126, 126, 255],
        [255,   0,   0,   0],        <--- transparent pixel
        [255,   0,   0,   0],        <--- transparent pixel
        [255,   0,   0,   0],        <--- transparent pixel
        [126, 126, 126, 255]],

       [[126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255]]], dtype=uint8)

In [34]: im[im[:,:,3]==0]=(1,2,3,4)

In [35]: im
Out[35]: 
array([[[126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255]],

       [[126, 126, 126, 255],
        [  1,   2,   3,   4],
        [  1,   2,   3,   4],
        [  1,   2,   3,   4],
        [126, 126, 126, 255]],

       [[126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255],
        [126, 126, 126, 255]]], dtype=uint8)
[32]中的
:im=np.array(Image.open('Image.png').convert('RGBA'))
在[33]中:im
出[33]:

数组([[126,126,126,255],虽然矢量化操作可能适用于我试图实现的目标,但我发现可行的解决方案如下所示

for h in range(0,data.shape[0]):
    for w in range(0,data.shape[1]):
        if data[h, w][3] == 0:
            data[h, w] = np.random.randint(0,255), np.random.randint(0,255), np.random.randint(0,255), 255

这会检查图像中的每个像素,然后检查该像素是否透明,如果透明,它会随机化该像素的RGB值。可能会很慢,但工作正常!

这与我正在查找的内容密切相关,但不完全相同。在您的示例中,我将如何分别调整每个像素的RGBA值?因此,我n除了将所有透明像素更改为(1,2,3,4),如何使第一个像素具有例如(1,2,3,4),第二个像素具有例如(5,6,7,8),等等…感谢您的回复!我已经更新了代码,使其比您原来的问题更灵活。很抱歉,问题不太清楚。有时很难用文字描述您到底在寻找什么。尽管我接受了您的答案,因为它似乎比我的解决方案更优化。谢谢您的帮助!酷-很高兴有帮助。祝你的项目好运!