web-dev-qa-db-fra.com

Comment créer une image dans PIL en utilisant une liste de tuples RVB?

Supposons que j'ai une liste de pixels (représentés sous forme de tuples avec 3 valeurs RVB) dans une liste qui ressemble à list(im.getdata()), comme ceci:

[(0,0,0),(255,255,255),(38,29,58)...]

Comment créer une nouvelle image en utilisant des valeurs RVB (chaque Tuple correspond à un pixel) dans ce format?

Merci de votre aide.

29
Amit

Vous pouvez le faire comme ceci:

list_of_pixels = list(im.getdata())
# Do something to the pixels...
im2 = Image.new(im.mode, im.size)
im2.putdata(list_of_pixels)
49
Aleksi Torhamo

Vous pouvez également utiliser scipy pour cela:

#!/usr/bin/env python

import scipy.misc
import numpy as np

# Image size
width = 640
height = 480
channels = 3

# Create an empty image
img = np.zeros((height, width, channels), dtype=np.uint8)

# Draw something (http://stackoverflow.com/a/10032271/562769)
xx, yy = np.mgrid[:height, :width]
circle = (xx - 100) ** 2 + (yy - 100) ** 2

# Set the RGB values
for y in range(img.shape[0]):
    for x in range(img.shape[1]):
        r, g, b = circle[y][x], circle[y][x], circle[y][x]
        img[y][x][0] = r
        img[y][x][1] = g
        img[y][x][2] = b

# Display the image
scipy.misc.imshow(img)

# Save the image
scipy.misc.imsave("image.png", img)

donne

enter image description here

11
Martin Thoma