我正在尝试将随机填充数字(0,1,2)的数组转换为图像,其中每个数字都显示为不同的颜色(如果可能的话,最好由我选择),但是我找不到任何图像做到的方式。有谁知道这是否可以做到吗?
我尝试使用PIL,但事实证明我的尝试并不令人满意。如果有人可以提供帮助,我将非常感谢。
我知道如何将其显示为图像,但是我不知道如何将其随机化。假设我有一个尺寸为400x500的数组,我想让每个单元格都具有三个值之一,我可以这样做吗? (这部分代码大部分来自注释,不是我写的)
from PIL import Image
import numpy as np
w, h = 500, 400
a = [255, 0, 0]
b = [0, 255, 0]
c = [0, 0, 255]
data = np.array(np.random.random((a,b,c),(h, w, 3), dtype=np.uint8)
#I'd like the random.random to take one of the three values ("[255, 0, 0]", "[0,255, 0]", or "[0, 0, 255]")
img = Image.fromarray(data, 'RGB')
img.save('my.png')
img.show()
有没有办法做到这一点?
我现在明白了,谢谢大家的帮助!
答案 0 :(得分:0)
您可以使用PIL创建(并显示)图像:
from PIL import Image
import numpy as np
w, h = 512, 512
data = np.zeros((h, w, 3), dtype=np.uint8)
data[256, 256] = [255, 0, 0]
img = Image.fromarray(data, 'RGB')
img.save('my.png')
img.show()
答案 1 :(得分:0)
因此,此过程分为两个部分,以及一些解决方法。
为简单起见,您可以简单地制作一个由三元组组成的二维numpy数组:
np.zeros((h, w, 3))
然后对其进行迭代,根据调用{返回的值,将每个值分配给(225,0,0),(0,255,0)或(0,0,255) 3}}。
不过,更笼统地说,如果您想要任意数量的颜色以及这些颜色的任意分配,我建议您选择类似的内容:
colorMapping = {
0: (255, 0, 0),
1: (0, 255, 0),
2: (0, 0, 255),
3: (255, 255, 0),
4: (128, 42, 7),
5: (128, 42, 7)
# whatever colors you want. Could also use a list, but may be less clear.
}
w = #something
h = #something
numberOfColors = len(colorMapping)
randArray = np.random.rand(w, h)
scaledArray = randArray * numberOfColors
colorMapArray = scaledArray.astype(int)
# see [here][3] for sleeker, more elegant way of doing this
pixels = np.zeros((w, h, 3))
for i in range(0, w):
for j in range(0, h):
colorNumber = colorMapArray[i, j]
pixels[(i, j)] = colorMapping[colorNumber]
im = Image.fromarray(pixels.astype('uint8'), 'RGB')
im.show()
响应编辑:
您可以像在该代码示例中一样进行一些小的更改,但是您需要使用numpy.random.rand中的其中一项,才能将函数应用于2D numpy数组中的每个值。
答案 2 :(得分:0)
也许是这样吗?
import numpy as np
colors = [[255, 0, 0], [0, 255, 0], [0, 0, 255]]
# Make a mask for placing values
img = np.random.randint(0, num_colors, size=(256, 256))
color_img = np.zeros((img.shape[0], img.shape[1], 3), dtype='uint8')
color_img[img == 0, ...] = colors[0]
color_img[img == 1, ...] = colors[1]
color_img[img == 2, ...] = colors[2]
答案 3 :(得分:0)
您与代码非常接近,只是缺少一个查找表(LUT)来查找与您的0,1,2数据相对应的颜色:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image
# Specify image size, create and fill with random 0, 1, or 2
w, h = 500, 400
data = np.random.randint(0,3,(h, w), dtype=np.uint8)
# Make LUT (Look Up Table) with your 3 colours
LUT = np.zeros((3,3),dtype=np.uint8)
LUT[0]=[255,0,0]
LUT[1]=[0,255,0]
LUT[2]=[0,0,255]
# Look Up each pixel in the LUT
pixels = LUT[data]
# Convert Numpy array to image, save and display
img = Image.fromarray(pixels)
img.save('result.png')
img.show()