如何在Python中保存从灰度转换为RGB的图像?

时间:2019-09-07 01:53:19

标签: python numpy

我是使用Python的新手,我想知道如何保存添加了额外香奈儿图像的图像。

我导入打开了一个图像,并添加了2个零数组,以尝试转换为RBG图像,但是我通常不保存这些内容。

from PIL import Image
import numpy as np
from array import array

i= Image.open('/content/drive/My Drive/DDICM19/imagens/mdb001.jpg')
dim = np.zeros((1024,1024))
R = np.stack((i,dim, dim), axis=2)
dim = np.zeros((1024,1024))
dim.save('/content/drive/My Drive/DDICM19/imagensP/teste.jpg')

返回:

    AttributeError                            Traceback (most recent call last)
    <ipython-input-32-073545b24d75> in <module>()
          7 R = np.stack((i,dim, dim), axis=2)
          8 dim = np.zeros((1024,1024))
    ----> 9 dim.save('/content/drive/My Drive/DDICM19/imagensP/teste.jpg')

AttributeError: 'numpy.ndarray' object has no attribute 'save'

有人帮助。

1 个答案:

答案 0 :(得分:0)

首先:您尝试使用零div保存numpy数组,而不是使用RGB通道保存R


但是R是numpy数组,您必须将其转换回PIL图片

Image.fromarray(R, 'RGB').save('output.jpg')

要将灰度转换为RGB,最好对R,G,B重复相同的值,而不要添加零

R = np.stack((i, i, i), axis=2)

用零给我一些奇怪的东西。它必须使用int8unit8数据类型将其正确转换为RGB

dim = np.zeros((i.size[1], i.size[0]), 'uint8')

我还使用图像的大小来创建带有零的数组,但是您必须记住图像使用(x,y),数组使用(y, x),这意味着(row, column)


示例

from PIL import Image
import numpy as np

i = Image.open('image.jpg')
#i = i.convert('L') # convert RGB to grayscale to have only one channel for tests
print(i.size)  # (x, y)

dim = np.zeros((i.size[1], i.size[0]), 'int8') # array uses different order (y, x)
print(dim.shape)

R = np.stack((i, dim, dim), axis=2)
#R = np.stack((i, i, i), axis=2) # convert grayscale to RGB
print(R.shape)
#print(R[0,2]) # different values if not used `int8` #(y,x)

img = Image.fromarray(R, 'RGB')
img.save('output.jpg')
#print(img.getpixel((2,0))) # different values if not used `int8` #(x,y)

编辑:您还可以将零数组转换为可用作图像中通道的灰度图像

 img_zero = Image.fromarray(dim, 'L')

 img = Image.merge('RGB', (i, img_zero, img_zero))
 img.save('output.jpg')

然后图像看起来很有趣。