【问题标题】:Store 2D Array in .png format with colours [duplicate]以.png格式存储带有颜色的二维数组[重复]
【发布时间】:2017-12-08 21:28:10
【问题描述】:

我编写了这个 Python 程序来创建矩阵(二维数组)并将其保存到 .png 文件中。该程序编译并运行,没有任何错误。即使创建了 IMAGE.png 文件,但 png 文件也不会打开。当我尝试在 MSPaint 中打开它时,它说:

无法打开图片。不是有效的位图文件或其格式目前不受支持。

我的目标是根据 2D 数组中存储的数字创建一个 RBG png 图像。

源代码:

    import numpy;
    import png;

    imagearray = numpy.zeros(shape=(512,512));

    /* Code to insert one '1', '2', '3' in certain locations 
       of the numpy 2D Array. Rest of the location by default stores zero '0'.*/


    f = open("IMAGE.png", 'wb');
    f.write(imagearray);
    f.close();

我不明白我哪里出错了,因为没有错误消息。请帮忙。

PS- 我只是想将矩阵保存为图像文件,所以如果您在 Python2.7 中有更好更简单的方法,请建议。

【问题讨论】:

  • 请不要在python中使用分号,这是不必要的。此外,您的代码过度缩进。
  • 您的代码不起作用,因为 python 不知道您正在尝试保存图像 - 它所看到的只是您将数组写入的二进制文件 - .png 只不过文件名的一部分。有效的 PNG 文件需要一个标头,而您创建的文件没有此标头

标签: python arrays numpy bitmap pypng


【解决方案1】:

使用 matplotlib 绘制图像并保存。

import matplotlib.pyplot as plt
import numpy as np
a = np.random.uniform(size=(25, 25, 3))  # random 3D array
plt.imshow(a)
plt.savefig("img.png")

imshow() 有各种感兴趣的参数,其中interpolation (examples here) 和cmap (colormap)

按照this question 删除坐标轴和空格:

plt.axis('off')
plt.savefig("img.png", bbox_inches='tight')

【讨论】:

  • 这通常是保存图像的不好方法,因为它违反了缩放、重新着色和边框 - 在 matplotlib 中有更好的解决方案,在重复的问题中
  • @Eric 所以我会删除我的答案
猜你喜欢
  • 2014-08-25
  • 2019-08-14
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 2018-09-21
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多