A-A+

将Numpy数组保存为图像、将图片转换为Numpy数组的几种方法

2020年04月13日 21:21 汪洋大海 暂无评论 共1932字 (阅读1,540 views次)

将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/

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言