2013-03-07 10 views
6

Sto cercando di creare un'immagine 100x100 con ogni pixel di essere un colore a caso diverso, come in questo esempio:100x100 pixel dell'immagine con colori casuali

enter image description here

Ho cercato di utilizzare matplotlib ma io' Non ho molta fortuna Dovrei forse usare PIL?

+2

Che cosa hai provato in particolare? – tacaswell

+1

(Cioè, assicurati di inviare il codice corrente/tentativo e descrivi come non funzionano come previsto.) –

risposta

19

Questo è semplice con numpy e pylab. Puoi impostare la mappa colori come vuoi, qui uso lo spettro.

from pylab import imshow, show, get_cmap 
from numpy import random 

Z = random.random((50,50)) # Test data 

imshow(Z, cmap=get_cmap("Spectral"), interpolation='nearest') 
show() 

enter image description here

tua immagine di destinazione sembra avere una colormap in scala di grigi con una densità di pixel superiore a 100x100:

import pylab as plt 
import numpy as np 

Z = np.random.random((500,500)) # Test data 
plt.imshow(Z, cmap='gray', interpolation='nearest') 
plt.show() 

enter image description here

+0

come salvare queste immagini come file su ubuntu? – raitisd

+1

@raitisd per salvare le immagini usare ['savefig'] (https://matplotlib.org/api/pyplot_api.html?highlight=matplotlib%20pyplot%20savefig#matplotlib.pyplot.savefig) – Hooked

13

Se si desidera creare un file immagine (e mostrarlo altrove, con o senza Matplotlib), è possibile utilizzare Numpy e PIL come segue:

import numpy, Image 

imarray = numpy.random.rand(100,100,3) * 255 
im = Image.fromarray(imarray.astype('uint8')).convert('RGBA') 
im.save('result_image.png') 

L'idea è quella di creare un array numerico, convertirlo in un'immagine RGB e salvarlo in un file. Se si desidera un'immagine in scala di grigi, è necessario utilizzare convert('L') anziché convert('RGBA').

Spero che questo aiuti

+1

intendi' da PIL import Image' ? –

3

ho voluto scrivere alcune semplici file BMP, così ho ricercato il formato e scritto molto semplice bmp.py module:

# get bmp.py at http://www.ptmcg.com/geo/python/bmp.py.txt 
from bmp import BitMap, Color 
from itertools import product 
from random import randint, choice 

# make a list of 256 colors (all you can fit into an 8-bit BMP) 
colors = [Color(randint(0,255), randint(0,255), randint(0,255)) 
       for i in xrange(256)] 

bmp = BitMap(100,100) 
for x,y in product(xrange(100),xrange(100)): 
    bmp.setPenColor(choice(colors)) 
    bmp.plotPoint(x,y) 

bmp.saveFile("100x100.bmp", compress=False) 

Esempio 100x100.bmp:

100x100.bmp

Per dimensioni dei pixel leggermente più grandi, utilizzare:

PIXEL_SIZE=5 
bmp = BitMap(PIXEL_SIZE*100,PIXEL_SIZE*100) 
for x,y in product(xrange(100),xrange(100)): 
    bmp.setPenColor(choice(colors)) 
    bmp.drawSquare(x*PIXEL_SIZE,y*PIXEL_SIZE,PIXEL_SIZE,fill=True) 

filename = "%d00x%d00.bmp" % (PIXEL_SIZE,PIXEL_SIZE) 
bmp.saveFile(filename) 

500x500.bmp

Non si può decidere di utilizzare bmp.py, ma questo vi mostra l'idea generale di ciò che è necessario fare.

1

credo che la mappa dei colori di tale matrice di essere ossa, cioè

#import the modules 
import numpy as np 
import matplotlib.cm as cm 
import matplotlib.pyplot as plt 

rand_array=np.random.rand(550,550) #create your array 
plt.imshow(rand_array,cmap=cm.bone) #show your array with the selected colour 
plt.show() #show the image 

dovrebbe produrre quello che stai cercando :)

EDIT: Basta cambiare 550-100 se si desidera un 100x100 array