100x100
次の例のように、各ピクセルが異なるランダムな色である画像を作成しようとしています。
使ってみましたmatplotlib
が、運が悪いです。PILを使用する必要がありますか?
100x100
次の例のように、各ピクセルが異なるランダムな色である画像を作成しようとしています。
使ってみましたmatplotlib
が、運が悪いです。PILを使用する必要がありますか?
画像ファイルを作成する(そしてMatplotlibの有無にかかわらず、他の場所に表示する)場合は、次のようにNumPyとPillowを使用できます。
import numpy
from PIL import 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')
ます。
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()
ターゲット画像は、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()
いくつかの単純な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
# use a set to make 256 unique RGB tuples
rgbs = set()
while len(rgbs) < 256:
rgbs.add((randint(0,255), randint(0,255), randint(0,255)))
# convert to a list of 256 colors (all you can fit into an 8-bit BMP)
colors = [Color(*rgb) for rgb in rgbs]
bmp = BitMap(100, 100)
for x,y in product(range(100), range(100)):
bmp.setPenColor(choice(colors))
bmp.plotPoint(x, y)
bmp.saveFile("100x100.bmp", compress=False)
サンプル100x100.bmp:
少し大きいピクセルサイズの場合は、次を使用します。
PIXEL_SIZE=5
bmp = BitMap(PIXEL_SIZE*100, PIXEL_SIZE*100)
for x,y in product(range(100), range(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)
bmp.pyを使用したくない場合もありますが、これは、実行する必要があることの一般的な考え方を示しています。
import numpy as np
import matplotlib.pyplot as plt
img = (np.random.standard_normal([28, 28, 3]) * 255).astype(np.uint8)
# see the raw result (it is 'antialiased' by default)
_ = plt.imshow(img, interpolation='none')
# if you are not in a jupyter-notebook
plt.show()
この28x28RGB画像が表示されます。
その配列のカラーマップは骨だと思います。
#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に変更します