我有一个Numpy数组类型的矩阵。如何将它写入磁盘作为图像?任何格式都可以(png,jpeg,bmp ...)。一个重要的限制是PIL不存在。
我有一个Numpy数组类型的矩阵。如何将它写入磁盘作为图像?任何格式都可以(png,jpeg,bmp ...)。一个重要的限制是PIL不存在。
from PIL import Image
来使它更加清晰明了。 - sage这个使用了PIL,但或许对一些人会有用:
import scipy.misc
scipy.misc.imsave('outfile.jpg', image_array)
编辑:当前的scipy
版本开始对所有图像进行规范化处理,以便使min(data)成为黑色,max(data)成为白色。如果数据应该是精确的灰度级别或精确的RGB通道,则这是不需要的。解决方案:
import scipy.misc
scipy.misc.toimage(image_array, cmin=0.0, cmax=...).save('outfile.jpg')
使用 matplotlib
:
import matplotlib.image
matplotlib.image.imsave('name.png', array)
适用于matplotlib 1.3.1,我不知道低版本是否适用。来自文档字符串:
Arguments:
*fname*:
A string containing a path to a filename, or a Python file-like object.
If *format* is *None* and *fname* is a string, the output
format is deduced from the extension of the filename.
*arr*:
An MxN (luminance), MxNx3 (RGB) or MxNx4 (RGBA) array.
matplotlib.pyplot.imsave
可以实现图像的保存。 - Aleksei Petrenkomatplotlib.pyplot
库:import matplotlib.pyplot as plt
,然后使用 plt.imsave('name.png', array)
将数组(array
)保存为名为 'name.png'
的图片。 - Alessandro Jacopson有Python的opencv
(文档在这里)。
import cv2
import numpy as np
img = ... # Your image as a numpy array
cv2.imwrite("filename.png", img)
如果您需要进行除保存以外的更多处理,这将非常有用。
np.zeros((10,10))
替换为您的图像。 - ButterDog纯Python(2和3),一个没有第三方依赖的代码片段。
该函数编写了压缩的,真彩色(每像素4个字节)RGBA
PNG图像。
def write_png(buf, width, height):
""" buf: must be bytes or a bytearray in Python3.x,
a regular string in Python2.x.
"""
import zlib, struct
# reverse the vertical line order and add null bytes at the start
width_byte_4 = width * 4
raw_data = b''.join(
b'\x00' + buf[span:span + width_byte_4]
for span in range((height - 1) * width_byte_4, -1, - width_byte_4)
)
def png_pack(png_tag, data):
chunk_head = png_tag + data
return (struct.pack("!I", len(data)) +
chunk_head +
struct.pack("!I", 0xFFFFFFFF & zlib.crc32(chunk_head)))
return b''.join([
b'\x89PNG\r\n\x1a\n',
png_pack(b'IHDR', struct.pack("!2I5B", width, height, 8, 6, 0, 0, 0)),
png_pack(b'IDAT', zlib.compress(raw_data, 9)),
png_pack(b'IEND', b'')])
...数据应该直接写入二进制文件,例如:
data = write_png(buf, 64, 64)
with open("my_image.png", 'wb') as fh:
fh.write(data)
buf
)应该是什么格式吗?它似乎不是一个numpy数组... - christianbrodbeckplt.axis('off')
- yakout保存numpy数组为图像,您有几个选择:
1)最佳选择:OpenCV
import cv2
cv2.imwrite('file name with extension(like .jpg)', numpy_array)
2) Matplotlib
from matplotlib import pyplot as plt
plt.imsave('file name with extension(like .jpg)', numpy_array)
3) PIL
from PIL import Image
image = Image.fromarray(numpy_array)
image.save('file name with extension(like .jpg)')
4) ...
scipy.misc
给出有关imsave
函数的弃用警告,并建议改用imageio
。
import imageio
imageio.imwrite('image_name.png', img)
from skimage.io import imsave
imsave('Path_to_your_folder/File_name.jpg',your_array)