python-3.x - 用 numpy 生成 8 位图像

标签 python-3.x numpy colors

我正在尝试生成所有 8 位颜色的图像。这是重要的一点:1 个像素代表 1 种独特的颜色。那是 2^8 或 256 种颜色 - 应该是 32 x 32 图像。
计划是能够改变位深度并创建不同的图像。即 65536 色为 16 位。
这是我所拥有的:

import numpy as np
from PIL import Image


# --------------------------------------------------------------
def create_image(output, width, height, pixels):

  # Convert the pixels into an array using numpy
  array = np.array(pixels, dtype=np.uint8)
  img = Image.fromarray(array)
  img.save(output)

# --------------------------------------------------------------

bit = 8
cmap = plt.get_cmap("viridis", 2**bit)
a = cmap(np.linspace(0,1,2**bit))
numOfCols = (len(a)) # number of cols
x = int(np.sqrt(2**bit)*2)
y = int(np.sqrt(2**bit)*2)
arr = np.reshape(a, (x, y)) 
create_image("test.png", x, y, arr)
我是 numpy 的新手,我可能有错误的数组初始大小,因为我收到错误ValueError: cannot reshape array of size 1024 into shape (16,16)如果我试图将它强制放入一个 16 x 16 的数组中。
其次,图像只是黑色,这对咖啡很好,对我的结果不太好。
如何将包含所有颜色数据的数组正确传输到图像?

最佳答案

首先,您的颜色图以下列方式生成一组值:

In [71]: mymap = cmap(np.linspace(0, 1, 2 ** bit))

In [72]: mymap
Out[72]:
array([[0.267004, 0.004874, 0.329415, 1.      ],
       [0.26851 , 0.009605, 0.335427, 1.      ],
       [0.269944, 0.014625, 0.341379, 1.      ],
       ...,
       [0.974417, 0.90359 , 0.130215, 1.      ],
       [0.983868, 0.904867, 0.136897, 1.      ],
       [0.993248, 0.906157, 0.143936, 1.      ]])
this问题,请注意 PIL 无法处理 32 位浮点 RGB 格式。
它确实支持 3 个 8 位整数的元组 ,所以我们的目标是使这些东西成为整数并将它们缩放到 0-255 范围。并删除最后一列(不透明度)。
# Filter out ones
mymap = mymap[:, :-1]
# Multiply by 256 and convert to uint8
mymap = np.uint8(mymap * 256)
现在我们必须正确 reshape 它变成一个 16x16 的数组。
实际上必须 reshape 成(16, 16, 3) ,因为结果将是一个 3d 数组。
mymap = mymap.reshape(16, 16 ,3)
最后,从中制作一个 PIL 图像并写出
img = Image.fromarray(mymap)
img.save("output.png")
我的结果是这样的:(请放大,因为它只有 16x16 像素)
output

关于python-3.x - 用 numpy 生成 8 位图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66472530/

相关文章:

python - 从curl转换python请求错误错误401

python - Sphinx 找不到我的 python 文件。说 'no module named ...'

python - 如何对 Pandas DF 列中的值进行排序并删除重复项

python - 从 C 代码调用 numpy 函数

visual-studio-2010 - 更改 Web.config 名称属性值的颜色

Python 包未导入 AWS EMR 中

python - 将图像 channel 顺序从 channel 第一个更改为最后一个

python - numpy 类型字符串中的 "|"是什么意思?

objective-c - 更改CAMetalLayer背景颜色

flutter - 选择选项卡时的TabBar图标颜色