直接按照书中的教程将代码输进去后会得到:imread
is deprecated in SciPy 1.0.0, and will be removed in 1.2.0. Use imageio.imread
instead.
如果直接将imread
换成所说的imgeio.imread
会显示库里面没有该函数
如果导入imrage
函数所在的库之后import imageio
再运行程序仍发现无法运行
会显示ValueError: Could not find a format to read the specified file in mode ‘i‘
对于读取图片一般用如下三种方式操作:
方式一:
import scipy.misc
img=scipy.misc.imread(’*.jpg’)
(注释:由于scipy.misc要被裁掉,所以引用第二种方式进行图片的读取)
方式二:
import imageio
img=imageio.imread(’*.jpg’)
(引用第二种图片读取方式时报错:ValueError: Could not find a format to read the specified file in mode ‘i’,改为第三种方式读取图片)
方式三:
import Image
img=Image.open(’*.jpg’)
(引用第三种方式读取图片,报错:AttributeError: ‘JpegImageFile’ object has no attribute ‘shape’,将图片转换为数组类型)
img=np.array(img)
可是按照方式三会显示没有image
库
目前没有找到这种方法的解决办法。
但是在方法二的基础上,有人提出了两种解决办法:
方法一:
可尝试加个plugin
image = io.imread(filename,plugin='matplotlib')
方法二:
加个pilmode
imageio.imread(filename,pilmode="RGB")
但是这两种方法我均尝试失败,于是我检查了我准备读取的图片,发现它已经损坏
我重新调整了待读取的图片后,尝试在imageio.imread
函数中直接使用待读取的文件名,而不是给函数一个变量,发现可以读取该图片了
所以我在上述两种方法上再总结两个我自己的方法:
方法三:
检查待读取图片是否已经损坏,如果已经损坏那么用啥函数都是没卵用!
方法四:
在使用imageio.imread函数的时候要导入相应的imageio的库,然后在与使用scipy.misc.imread不同,image.imread函数变量中直接填文件的路径名称即可(好像也就是不用提前open读取后存入句柄中)
然后我又遇到了一个问题,在读取图片后无法将其按照784的矩阵充足,显示:
cannot reshape array of size 2352 into shape (784,)
查找之后发现直接读取的图片是RGB格式,有三个通道,而教程所用程序只是处理灰度图像,即只有一个通道,所以读取图片后还需进行一个操作:
img_array = img_array[:,:,0]
将RGB图像转换为灰度图像