A-A+
将Numpy数组保存为图像、将图片转换为Numpy数组的几种方法
将Numpy数组保存为图像,有以下几种方法:
1、使用scipy.misc
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | from PIL import Image
import numpy as np
from scipy import misc
# 首先在该py文件所在目录下随便放一张图片,使用PIL.Image库的open方法打开
image = Image.open("0_train.jpg")
# 使用numpy将该图片的二进制数据转换成多维数组形式
image_array = np.array(image)
# 打印该数组
print(image_array)
# 使用misc.imsave方法将数组保存为图片
misc.imsave('out.jpg', image_array) |
py文件所在的目录下生成了out.jpg图片,且该图片和0_train.jpg图片相同。
scipy.imsave方法会标准化所有图像,使数组中的最小值min(数据)变成黑色,最大值max(数据)变成白色。
如果数组数据是精确的灰度级或准确的RGB通道的数据,则代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | from PIL import Image
import numpy as np
# 使用PIL库和numpy库只是为了快速得到一个可以用于保存为图片的数组,即从现有的图片直接转换成数组
from scipy import misc
# 首先在该py文件所在目录下随便放一张图片,使用PIL.Image库的open方法打开
image = Image.open("0_train.jpg")
# 使用numpy将该图片的二进制数据转换成多维数组形式
image_array = np.array(image)
# 打印该数组
print(image_array)
# 使用misc.imsave方法将数组保存为图片
misc.toimage(image_array, cmin=0.0, cmax=...).save('outfile.jpg') |
py文件所在目录下生成outfile.jpg图片,且该图片和0_train图片一样。
使用PIL库
1 2 3 4 5 6 7 8 9 10 11 12 13 | from PIL import Image
import numpy as np
# 打开图片
im = Image.open("0_train.jpg")
# 将图片转化为numpy数组
im_array = np.array(im)
# 打印数组
print(im_array)
# 将数组转化回图片
img = Image.fromarray(im_array).convert('RGB')
# 将数组保存为图片
img.save("out.bmp") |
使用PIL库保存图片的最大好处是,你可以将图片保存为目前支持的几乎所有主流图片格式,如jpg,png,bmp等。
使用matplotlib的两种方法
1 2 3 4 5 6 7 8 9 10 11 12 13 | from PIL import Image
import numpy as np
# 使用PIL库和numpy是只是为了快速得到一个可以用于保存为图片的数组,即从现有的图片直接转换成数组
from matplotlib import image
# 打开图片
im = Image.open("0_train.jpg")
# 将图片转化为numpy数组
im_array = np.array(im)
# 打印数组
print(im_array)
# 保存图片
image.imsave("out_plt.png", im_array) |
使用matplotlib还可以用pyplot的绘图功能
来用数组的数据绘制出图片再保存。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from PIL import Image
import numpy as np
# 使用PIL库和numpy是只是为了快速得到一个可以用于保存为图片的数组,即从现有的图片直接转换成数组
import matplotlib.pyplot as plt
# 打开图片
im = Image.open("0_train.jpg")
# 将图片转化为numpy数组
im_array = np.array(im)
# 打印数组
print(im_array)
# 绘制图片
plt.imshow(im_array)
# 保存图片
plt.savefig("out_plt2.png") |
生成图片如下。注意这种方式生成的图片默认是带坐标轴的。你可以使用pyplot中相关方法隐藏坐标轴。另外这种绘制出的图片四周有空白。
使用opencv库
1 2 3 4 5 6 7 8 9 10 11 12 | from PIL import Image
import numpy as np
import cv2
# 打开图片
im = Image.open("0_train.jpg")
# 将图片转化为numpy数组
im_array = np.array(im)
# 打印数组
print(im_array)
# 保存图片
cv2.imwrite("out_cv2.jpg", im_array) |
文字来源:https://www.pianshen.com/article/992757529/
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏