具有随机像素颜色的100x100图像

时间:2013-03-07 02:14:26

标签: python image matplotlib python-imaging-library draw

我正在尝试制作100x100图像,每个像素都是不同的随机颜色,如下例所示:

enter image description here

我试过使用matplotlib,但我没有太多运气。我应该使用PIL吗?

5 个答案:

答案 0 :(得分:23)

numpypylab很简单。您可以将色彩映射设置为您喜欢的任何颜色,这里我使用光谱。

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

答案 1 :(得分:19)

如果你想创建一个图像文件(并在其他地方显示,有或没有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')

希望这有帮助

答案 2 :(得分:3)

我想编写一些简单的BMP文件,所以我研究了这种格式并编写了一个非常简单的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)

示例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,但这会向您展示您需要做什么的一般概念。

答案 3 :(得分:2)

我认为该数组的颜色图是骨骼,即

#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

应该产生你想要的东西:)

编辑:如果你想要100x100阵列,只需将550改为100

答案 4 :(得分:0)

import numpy as np
import matplotlib.pyplot as plt

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

将为您提供此28x28 RGB图像:

img