我目前有一个想要转换为PIL图像并保存的NumPy数组或RBG元组。目前我正在做以下工作:final = Image.fromarray(im_arr, mode='RGB')。其中,im_arr是(R, G, B)形式的元组的NumPy数组。在创建如下所示的图像时,它似乎最终保持了元组的分离。
final = Image.fromarray(im_arr, mode='RGB')
im_arr
(R, G, B)
8ulbf1ek1#
尝试使用以下功能:
import numpy import Image def PIL2array(img): return numpy.array(img.getdata(), numpy.uint8).reshape(img.size[1], img.size[0], 3) def array2PIL(arr, size): mode = 'RGBA' arr = arr.reshape(arr.shape[0]*arr.shape[1], arr.shape[2]) if len(arr[0]) == 3: arr = numpy.c_[arr, 255*numpy.ones((len(arr),1), numpy.uint8)] return Image.frombuffer(mode, size, arr.tostring(), 'raw', mode, 0, 1) def main(): img = loadImage('foo.jpg') arr = PIL2array(img) img2 = array2PIL(arr, img.size) img2.save('out.jpg') if __name__ == '__main__': main()
点评:http://code.activestate.com/recipes/577591-conversion-of-pil-image-and-numpy-array/其他信息:http://www.imagexd.org/tutorial/lessons/0_images_are_arrays.html如果它不起作用,可能是您的数组没有合适的形状。
w9apscun2#
如果您的数组是一个由窗体宽度、高度和元组组成的数组,则此代码将其转换为可由Image.Fromarray读取的数组数组。
import numpy as np from PIL import Image arr = np.array( [ [(178, 158, 165), (185, 196, 191), (207, 222, 226)], [(202, 184, 176), (68, 58, 66), (69, 57, 60)], [(194, 158, 179), (109, 119, 116), (70, 64, 57)] ] ) # a small example array shape = arr.shape new_arr = np.empty((shape[0], shape[1], 3), dtype=np.uint8) for y, row in enumerate(arr): for x, color in enumerate(row): new_arr[y, x] = np.array(color) Image.fromarray(new_arr, "RGB").show()
与另一个答案相比,这可能对较大的图像来说比较慢,但那个答案对我不起作用。
8hhllhi23#
为了将表示RGB组件的元组的2D数组还原为我使用的图像,我使用了以下方法:
from PIL import Image import numpy as np dt = np.dtype([('x', 'u1'), ('y', 'u1'), ('z', 'u1')]) Image.fromarray(im_arr.astype(dt), 'RGB')
其中im_arr是RGB元组的2D数组。在我的例子中,我使用uint8(‘u1’)来表示R、G、B组件;如果您的图像组件是不同类型的,请调整dtype-需要进行实验。这里有类似的问题:以图像的形式显示一个二维Numy数组,其中的内容是元组
3条答案
按热度按时间8ulbf1ek1#
尝试使用以下功能:
点评:http://code.activestate.com/recipes/577591-conversion-of-pil-image-and-numpy-array/
其他信息:http://www.imagexd.org/tutorial/lessons/0_images_are_arrays.html
如果它不起作用,可能是您的数组没有合适的形状。
w9apscun2#
如果您的数组是一个由窗体宽度、高度和元组组成的数组,则此代码将其转换为可由Image.Fromarray读取的数组数组。
与另一个答案相比,这可能对较大的图像来说比较慢,但那个答案对我不起作用。
8hhllhi23#
为了将表示RGB组件的元组的2D数组还原为我使用的图像,我使用了以下方法:
其中im_arr是RGB元组的2D数组。
在我的例子中,我使用uint8(‘u1’)来表示R、G、B组件;如果您的图像组件是不同类型的,请调整dtype-需要进行实验。
这里有类似的问题:以图像的形式显示一个二维Numy数组,其中的内容是元组