web-dev-qa-db-ja.com

ランダムなピクセルカラーの100x100画像

次の例のように、各ピクセルが異なるランダムな色である100x100画像を作成しようとしています。

enter image description here

matplotlibを使おうとしましたが、あまり運がありません。 PILを使用する必要がありますか?

11
IceDragon

これは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

26
Hooked

画像ファイルを作成する(そして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')を使用する必要があります。

お役に立てれば

21
heltonbiker

いくつかの単純な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
PaulMcG

その配列のカラーマップは骨であると私は信じています。

#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に変更するだけです

2
user2145646
import numpy as np
import matplotlib.pyplot as plt

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

この28x28RGB画像が表示されます。

img

1
banderlog013