Изображение 100x100 со случайным цветом пикселя

Я пытаюсь сделать изображение 100x100 причем каждый пиксель будет отличаться от случайного цвета, как этот пример:

enter image description here

Я пытался использовать matplotlib но мне не повезло. Должен ли я использовать PIL?

Ответ 1

Это просто с numpy и pylab. Вы можете установить цветовую палитру как угодно, здесь я использую спектральные параметры.

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

На вашем целевом изображении будет иметь цветовую палитру оттенков серого с более высокой плотностью пикселей, чем 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

Ответ 2

Если вы хотите создать файл изображения (и отобразить его в другом месте, с Matplotlib или без него), вы можете использовать Numpy и PIL следующим образом:

import numpy, Image

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

Идея здесь - создать числовой массив, преобразовать его в RGB-изображение и сохранить его в файл. Если вы хотите изображение в оттенках серого, вы должны использовать convert('L') вместо convert('RGBA').

Надеюсь это поможет

Ответ 3

Я хотел написать несколько простых файлов BMP, поэтому я исследовал формат и написал очень простой модуль bmp.py:

# 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)

Пример 100x100.bmp:

100x100.bmp

Для немного большего размера пикселя используйте:

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

Возможно, вы не хотите использовать bmp.py, но это показывает вам общее представление о том, что вам нужно делать.

Ответ 4

Я считаю, что цветовая карта этого массива будет костью, т.е.

#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

Должен произвести то, что вы ищете :)

EDIT: просто измените 550 на 100, если вы хотите массив 100x100

Ответ 5

import numpy as np
import matplotlib.pyplot as plt

img = (np.random.standard_normal([28, 28, 3]) * 255).astype(np.uint8)
plt.imshow(img)

Даст вам изображение RGB размером 28x28:

img