如何基于数组显示图块
How to display tiles based on an array
我创建了一些非常基本的 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))
它根据图像中的每个像素输出二维数组。
[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]
我如何从这个二维数组中将它们绘制到屏幕上,例如它说 255 可以显示一个蓝色矩形,如果它说 0 则显示一个红色矩形?显然稍后我希望分配纹理而不是颜色,但目前这并不重要。
PIL 图像到 Numpy 数组
首先,不要以这种方式将PIL Image转换为Numpy Array。它会破坏像素顺序。相反,使用
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。
我创建了一些非常基本的 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))
它根据图像中的每个像素输出二维数组。
[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]
我如何从这个二维数组中将它们绘制到屏幕上,例如它说 255 可以显示一个蓝色矩形,如果它说 0 则显示一个红色矩形?显然稍后我希望分配纹理而不是颜色,但目前这并不重要。
PIL 图像到 Numpy 数组
首先,不要以这种方式将PIL Image转换为Numpy Array。它会破坏像素顺序。相反,使用
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。