有一个Numpy数组类型的矩阵,如何将它作为图像写入磁盘?任何格式的图像都行(PNG,JPEG,BMP ...)。

最佳解决办法

可以使用scipy.misc,代码如下:

  1. import scipy.misc
  2. scipy.misc.imsave('outfile.jpg', image_array)

上面的scipy版本会标准化所有图像,以便min(数据)变成黑色,max(数据)变成白色。如果数据应该是精确的灰度级或准确的RGB通道,则解决方案为:

  1. import scipy.misc
  2. scipy.misc.toimage(image_array, cmin=0.0, cmax=...).save('outfile.jpg')

第二种解决办法

使用PIL。

给定一个numpy数组"A":

  1. from PIL import Image
  2. im = Image.fromarray(A)
  3. im.save("your_file.jpeg")

你可以用几乎任何你想要的格式来替换"jpeg"。有关格式详见here更多细节

第三种办法

纯Python(2& 3),没有第三方依赖关系的代码片段。

此函数写入压缩的真彩色(每个像素4个字节)RGBA PNG。

  1. def write_png(buf, width, height):
  2. """ buf: must be bytes or a bytearray in Python3.x,
  3. a regular string in Python2.x.
  4. """
  5. import zlib, struct
  6. # reverse the vertical line order and add null bytes at the start
  7. width_byte_4 = width * 4
  8. raw_data = b''.join(b'\x00' + buf[span:span + width_byte_4]
  9. for span in range((height - 1) * width_byte_4, -1, - width_byte_4))
  10. def png_pack(png_tag, data):
  11. chunk_head = png_tag + data
  12. return (struct.pack("!I", len(data)) +
  13. chunk_head +
  14. struct.pack("!I", 0xFFFFFFFF & zlib.crc32(chunk_head)))
  15. return b''.join([
  16. b'\x89PNG\r\n\x1a\n',
  17. png_pack(b'IHDR', struct.pack("!2I5B", width, height, 8, 6, 0, 0, 0)),
  18. png_pack(b'IDAT', zlib.compress(raw_data, 9)),
  19. png_pack(b'IEND', b'')])

...数据应直接写入以二进制打开的文件,如下所示:

  1. data = write_png(buf, 64, 64)
  2. with open("my_image.png", 'wb') as fd:
  3. fd.write(data)

  • Original source

  • 另见:Rust Port from this question.

  • 使用示例感谢@Evgeni Sergeev:https://stackoverflow.com/a/21034111/432509

第四种办法

matplotlib

  1. import matplotlib
  2. matplotlib.image.imsave('name.png', array)

适用于matplotlib 1.3.1,不确定更低的版本是否有效。文档:

  1. Arguments:
  2. *fname*:
  3. A string containing a path to a filename, or a Python file-like object.
  4. If *format* is *None* and *fname* is a string, the output
  5. format is deduced from the extension of the filename.
  6. *arr*:
  7. An MxN (luminance), MxNx3 (RGB) or MxNx4 (RGBA) array.

第五种办法

如果使用matplotlib,也可以这样做:

  1. import matplotlib.pyplot as plt
  2. plt.imshow(matrix) #Needs to be in row,col order
  3. plt.savefig(filename)

这将保存plot(而不是图像本身)。

第6种办法

python的opencv(http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html)。

  1. import cv2
  2. import numpy as np
  3. cv2.imwrite("filename.png", np.zeros((10,10)))

如果你需要做更多的处理,而不是保存,这个库比较有用。

参考文献

  • Saving a Numpy array as an image

将Numpy数组保存为图像相关推荐

  1. python用numpy生成图片并保存_python 实现将Numpy数组保存为图像

    python 实现将Numpy数组保存为图像 第一种方案 可以使用scipy.misc,代码如下: import scipy.misc misc.imsave('out.jpg', image_arr ...

  2. 34.35.热图(heatmap)、创建带注释的热图、使用辅助函数的代码样式、图像显示、图像插值、将图像数据导入Numpy数组、将numpy数组绘制为图像

    34.热图(heatmap) 34.1.创建带注释的热图 34.2.使用辅助函数的代码样式 35.图像显示 35.1.图像插值 35.2.将图像数据导入Numpy数组 35.3.将numpy数组绘制为 ...

  3. numpy数组保存至txt时一系列问题及其解决方案

    0.问题描述 在做语音的特征提取的时候,需要将numpy数组内的数据写入到txt文件中,但是在写入后却是这个狗样子,自动给我缺省了一些数据,且还存在一些其他问题,写入txt的原始代码如下所示: ''' ...

  4. python三维数据本地保存_如何将3D Python/NumPy数组保存为文本文件?

    如果保存文件需要是"csv"样式的文本,则可以使用多个savetxt和loadtxt.关键是要知道这两个都可以 以打开的文件作为输入. 写作示例:In [31]: A=np.ara ...

  5. python保存灰度图像_如何使用matplotlib/numpy将数组保存为灰度图像?

    我正在尝试将一个尺寸为128x128像素的numpy数组保存为灰度图像. 我只是简单地认为pyplot.imsave函数可以完成这项工作,但事实并非如此,它以某种方式将我的数组转换为RGB图像. 我试 ...

  6. python ndarray find_python – 从存储在NumPy ndarrays中的图像中查找特定(R,G,B)颜色值的(x,y)索引...

    我有一个存储在numpy数组中的图像,由imread()产生: >>> ndim array([[[ 0, 0, 0], [ 4, 0, 0], [ 8, 0, 0], ..., [ ...

  7. 如何以npy文件存储numpy数组呀

    使用 numpy 的 save() 函数可以将 numpy 数组保存到 .npy 文件中.例如: import numpy asnp# 假设你有一个 numpy 数组 a a = np.array([ ...

  8. python 写txt 换行_python 批配换行Numpy数组的保存与读取方法

    1. 数组以二进制格式保存 np.save和np.load是读写磁盘数组数据的两个主要函数.默认情况下,数组以未压缩的原始二进制格式保存在扩展名为npy的文件中,以数组a为例 np.save(&quo ...

  9. python保存数据框_python – 如何将numpy数组作为对象存储在pandas数据框中?

    我有一系列图像,存储在CVS文件中,每个图像一个字符串,该字符串是9216空格分隔整数的列表.我有一个函数将其转换为96×96 numpy数组. 我希望将这个numpy数组存储在我的数据帧的一列而不是 ...

最新文章

  1. WheelView实现省市区三级联动(数据库实现版本号附带完整SQL及数据)
  2. 三星电子通信撤出中国!
  3. GJB289A总线测试工装研究
  4. 怎样用好酒店培训管理系统
  5. 把html模板vue框架,vue框架搭建个人博客网站模板
  6. 语言技能c1,从0开始学法语,20个月考下DALF C1,我如何立竿见影学语言?
  7. 英文对于程序员的重要性
  8. 易灵思FPGA-报告总结篇
  9. 电商平台电子面单打印对接
  10. 96---Python 绘制阿基米德螺旋线
  11. 生成二维码并将Bitmap保存成图片
  12. 解封ChatGPT我只用了一句话
  13. ue的xml格式转换_迷你档-迷你档(minidown)下载 v2.5官方版--pc6下载站
  14. 第一个工作单位的那些事
  15. 往事如烟 - 老钟1
  16. 微商是如何推广的呢?
  17. 刚子扯谈:标题木有啊
  18. 一张图快速了解五大架构风格
  19. 蓝桥杯——既约分数(c语言)
  20. 计算机员工工资管理系统源代码,C++员工工资管理系统源代码

热门文章

  1. sv_labs学习笔记 专栏说明博文目录
  2. 你可能没听过的 Java 8 中的 10 个特性
  3. node 加密解密模块_聊聊Node加密模块crypto加密原理的那些事
  4. java输入验证码代码,JavaWeb 实现验证码功能(demo)
  5. 电大计算机考试将网页保存到桌面,电大计算机网考小抄.pdf
  6. Asp.Net无刷新分页( jquery.pagination.js)
  7. DIV+CSS常见错误汇总
  8. oracle的globalname后缀,在Oracle 11g下查看数据库的global_name
  9. 中的live_2016知乎Live精选汇编——简历类
  10. ORM框架之Mybatis(五)mybatis生成器配置文件说明以及生成的类的说明