我已经创建了一些非常基本的perlin噪音,并将其简化为这样。
from PIL import Image
col = Image.open("noise3.png")
grey = col.convert("L")
bw = grey.point(lambda x : 0 if x<128 else 255, "1")
bw.save("converted.png")
所以输出图像为:http://imgur.com/a/3WVrh
从这张图片中我转换成了一个像这样的数组:
from PIL import Image
import numpy as np
im = Image.open("converted.png","r")
pix_val = list(im.getdata())
Map_Array = np.reshape(pix_val, (-1, 128))
根据图像中的每个像素输出2D数组。
[255 255 255 ..., 0 0 0]
[ 0 0 255 ..., 0 0 0]
[ 0 0 255 ..., 0 0 0]
...,
[255 255 255 ..., 255 255 255]
[255 255 255 ..., 255 255 255]
[255 255 255 ..., 0 255 255]
从这个2d数组中,我如何将这些绘制到屏幕上,例如,它表示255可以显示蓝色矩形,如果显示0则显示红色矩形?显然后来我希望分配纹理而不是颜色,但目前并不重要。
答案 0 :(得分:0)
首先,不要以这种方式将PIL图像转换为Numpy数组。它会破坏像素顺序。相反,使用
Map_Array = np.array(im)
由于im
中只有两个值,Map_Array
将是一堆True
和False
。如果你真的希望它是0
和255
。这样做
Map_Array = np.array(im, dtype=np.uint8) # Contains 0 and 1.
Map_Array[Map_Array==1] = 255
只需使用pyplot
import matplotlib.pyplot as plt
plt.imshow(Map_Array)
plt.show()
由于默认的色彩映射,这两种颜色可能不是蓝色和红色。创建蓝色和红色的自定义色彩图,以用颜色绘制图像。
from matplotlib.colors import LinearSegmentedColormap
cm = LinearSegmentedColormap.from_list('CustomMap', [(1, 0, 0), (0, 0, 1)]) # Red and blue.
plt.imshow(Map_Array, cmap=cm)
plt.show()
有关自定义色彩映射的详细信息,请参阅here。