【问题标题】:Array to image in python with custom colors具有自定义颜色的python中图像的数组
【发布时间】:2016-03-06 03:32:16
【问题描述】:

我找到了以下两种创建图像的方法:

使用 PIL

from PIL import Image
import numpy as np
data = np.arange(1 * 2048).reshape(1, 2048)
print(data)
img = Image.fromarray(data, 'RGB')
img.save('my.png')

使用 Matplotlib

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
plt.imsave('filename.png', np.arange(1 * 2048).reshape(1, 2048))

它们都工作得很好。但是,我无法使用任何一种方法来遵循我的数据格式。

我的数组是一个二维数组,即32x1000

每个元素都是一个介于 0 到 255 之间的数字。

我希望将每个元素绘制为一个像素,该像素具有作为以下方法返回的 RGB 颜色。

def get_rgb_by_int(rgb_int):
    return rgb_int & 255, (rgb_int >> 8) & 255, (rgb_int >> 16) & 255

本质上,我想知道是否有一种方法可以使用相同的数组创建图像,其中每个元素现在都是另一个数组,代表 [r,g,b] 而不是 int

编辑 调用之后:这就是我所拥有的:

print(result.shape)
>> (32, 1000)

print(result[0])
>> [(7, 0, 0)...(13, 0, 0)]

我希望生成的图像为 1000 宽和 32 高。第一个像素应该是 RGB 值(7, 0, 0),第一行的最后一个像素应该是(13, 0, 0)result 中的每个元素代表一行。

【问题讨论】:

    标签: python matplotlib python-imaging-library


    【解决方案1】:

    方法是使用numpy。如果你有一个数组(不管它是如何构造的),看起来像:A = [[R, G, B], [R, G, B], ...,那么你可以这样做:

    import numpy as np
    A = np.array(A).reshape(-1, 3)
    

    现在A 将具有N x 3 形状,其中3 尺寸为RGB。如果你知道最终图像的大小,你可以这样做

    np.array(A).reshape(N, M, 3)
    

    它会根据你的需要将你的数组重新塑造成 RGB。然后,一旦你有了 numpy 数组,你的数组就变成了图像的形状,并且可以将其保存为 PNG 等。

    【讨论】:

    • 您的A 是我所拥有的,但嵌套在另一个数组中。 len(A) 总是 32。我该如何重塑它?基本上我有B = [A, A,...,A]
    • 你需要做B = np.array(B),现在B是你可以重塑的数组。在上面的示例中执行A.shape 应该会告诉您大小是多少。将 B 更改为 numpy 数组后,执行 B.shape 将显示您的形状正确。 len() 不会告诉您有关数组其他维度的任何信息。
    猜你喜欢
    • 2020-11-01
    • 2011-08-28
    • 2015-12-08
    • 2014-12-21
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2021-04-18
    • 2020-07-28
    相关资源
    最近更新 更多