2013-03-07 99 views
6

Tôi đang cố gắng để tạo ra một hình ảnh 100x100 với mỗi pixel là một màu sắc ngẫu nhiên khác nhau, như ví dụ sau:100x100 hình ảnh với màu điểm ảnh ngẫu nhiên

enter image description here

Tôi đã cố gắng sử dụng matplotlib nhưng tôi m không có nhiều may mắn. Tôi có nên sử dụng PIL không?

+2

Cụ thể bạn đã thử gì? – tacaswell

+1

(Tức là, hãy đảm bảo đăng mã/nỗ lực hiện tại và mô tả cách chúng không hoạt động như mong đợi.) –

Trả lời

19

Điều này rất đơn giản với numpypylab. Bạn có thể đặt bản đồ màu là bất cứ thứ gì bạn thích, ở đây tôi sử dụng quang phổ.

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

hình ảnh mục tiêu của bạn trông có một bản đồ màu xám với một mật độ điểm ảnh cao hơn 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

Tôi làm cách nào để lưu các hình ảnh này dưới dạng tệp trên ubuntu? – raitisd

+1

@raitisd để lưu hình ảnh sử dụng ['savefig'] (https://matplotlib.org/api/pyplot_api.html?highlight=matplotlib%20pyplot%20savefig#matplotlib.pyplot.savefig) – Hooked

13

Nếu bạn muốn tạo một tập tin hình ảnh (và hiển thị nó ở nơi khác, có hoặc không có Matplotlib), bạn có thể sử dụng Numpy và PIL như sau:

import numpy, Image 

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

Ý tưởng ở đây là tạo mảng số, chuyển đổi nó thành hình ảnh RGB và lưu nó vào tệp. Nếu bạn muốn hình ảnh màu xám, bạn nên sử dụng convert('L') thay vì convert('RGBA').

Hope this helps

+1

có nghĩa là' từ hình ảnh nhập PIL ' ? –

3

Tôi muốn viết một số tác phẩm BMP đơn giản, vì vậy tôi nghiên cứu các định dạng và viết rất đơn giản 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) 

mẫu 100x100.bmp:

100x100.bmp

Đối với kích thước pixel lớn hơn một chút, hãy sử dụng:

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

Bạn không thể muốn sử dụng bmp.py, nhưng điều này cho thấy bạn ý tưởng chung của những gì bạn sẽ cần phải làm.

1

Tôi tin bản đồ màu sắc của mảng đó là xương, tức là

#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 

nên tạo ra những gì bạn đang tìm kiếm :)

EDIT: Chỉ cần thay đổi 550-100 nếu bạn muốn có một 100x100 mảng

Các vấn đề liên quan