在其他博客上面看到许多思路,却没有解决我的问题,遂记录之引以为戒。
我在使用Yale_Face_Dataset数据集时,遇到如下格式的图片数据:
然后我想当然地直接把后缀改成“.jpg”或者“.png”,使用opencv的读取时便遇到了问题。
import cv2
import os
import numpy as np
img = cv2.imread('subject01.centerlight.jpg')
print(img.shape)
cv2.imshow("img", img)
cv2.waitKey(0)
输出为
None
Traceback (most recent call last):
cv2.imshow("img",img)
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.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读取。