完美解决AttributeError: module 'scipy.misc' has no attribute 'toimage'报错问题

问题描述:

学习MNIST机器学习入门课程时,将numpy数组转为图片保存时,出现AttributeError: module ‘scipy.misc’ has no attribute 'toimage’报错问题。
执行代码如下:

# 保存前20张图片
for i in range(20):
    image_array = train_images[i]
    #保存文件的格式为:mnist_train_0.jpg,mnist_train_1.jpg,...
    filename = save_dir + '/mnist_train_%d.jpg' %i
    #将image_array保存为图片
    # 先用scipy.misc.toimage转换为图像,再调用save直接保存
    scipy.misc.toimage(image_array, cmin=0.0, cmax=1.0).save(filename)

症结归因:
在网上查了python3使用toimage()函数的场景,发现这个函数已经弃用(deprecated),很多教程推荐降低第三方scipy的版本来配合toimage()函数的使用,本人感觉这有点“下嫁”的感觉,无法从根本上解决问题,况且技术更新迭代是不可避免的,我们需要顺势而为。

scipy.misc.toimage官方最新说明。

解决方案:

将问题转化为如何将数组保存成图像?

  • 方法一:使用cv2模块.imwrite()函数,将numpy数组转成图片保存。具体代码如下:
cv2.imwrite(filename, image_array)  #使用cv2实现图片与numpy数组的相互转化

参考链接:使用cv2实现图片与numpy数组的相互转化

  • 方法二:使用PIL模块Image下的.fromarray()函数,将numpy数组转成图片保存。具体代码如下:
from PIL import Image
Image.fromarray((image_array)).save(filename)  #使用PIL实现图片与numpy数组的相互转化
# 或者
Image.fromarray((image_array*255).astype('uint8'), mode='L').convert('RGB').save(filename)  # 用于处理彩色图像

参考链接:AttributeError: module ‘scipy.misc’ has no attribute ‘toimage’

  • 方法三:使用matplotlib模块,实现将numpy数组转成图片保存。(包含两种方法):

(1)优先推荐: 使用matplotlib模块image下的.imsave()函数,将numpy数组转成图片保存。具体代码如下:

from matplotlib import image
image.imsave(filename,image_array,cmap='gray')  # cmap常用于改变绘制风格,如黑白gray,翠绿色virdidis

(2)不太推荐: 使用matplotlib模块pyplot下的.savefig()函数,将numpy数组转成图片保存,生成的图片包含坐标轴和边框信息等。具体代码如下:

import matplotlib.pyplot as plt
# 绘制图片
plt.imshow(image_array,cmap='gray')
# 保存图片
plt.savefig(filename) # 此时,绘制图片时已经指定图片变量,故保存时无需再指明

参考链接:将Numpy数组保存为图像的几种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yale曼陀罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值