在其他博客上面看到许多思路,却没有解决我的问题,遂记录之引以为戒。
我在使用Yale_Face_Dataset数据集时,遇到如下格式的图片数据:
然后我想当然地直接把后缀改成“.jpg”或者“.png”,使用opencv的读取时便遇到了问题。
import cv2import osimport numpy as npimg = cv2.imread('subject01.centerlight.jpg')print(img.shape)cv2.imshow("img", img)cv2.waitKey(0)
输出为
NoneTraceback (most recent call last): cv2.imshow("img",img)cv2.error: OpenCV(4.6.0) D:aopencv-pythonopencv-pythonopencvmoduleshighguisrcwindow.cpp:967: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
解决方法:
我们使用PIL.Image
from PIL import Image# 打开图像文件im = Image.open('subject01.glasses')# 显示图像文件im.show()# 获取图像文件的大小和格式print(np.array(im.getdata()).shape, im.format)# 将图像文件保存为PNG格式im.save('image.png')
输出结果为:(77760,) GIF
可知该数据集的格式为GIF,不可以直接用opencv读取。
此保存结果image.png可以用opencv的imread读取。