有没有一种有效的方法来了解图像文件的大小(高度,重量,通道),而无需将其实际加载到python中?
琐碎的方式是:
img = cv2.imread('a.jpg')
print img.shape
但这会浪费CPU(和内存),因为我不需要图像本身。
答案 0 :(得分:7)
PIL的Image.open
在需要之前不会加载图片数据,如docs中所示,
这是一个懒惰的操作;这个函数标识文件,但是 文件保持打开状态,并且不从文件中读取实际图像数据 直到您尝试处理数据(或调用load()方法)。看到 新()。
要在ipython
我检查
im = Image.open(filename)
im.size
在22MB图片上,ps -av
报告:
33714 17772 0.8 /usr/bin/python2 /usr/bin/ipython2
34506 18220 0.8 /usr/bin/python2 /usr/bin/ipython2
34506 18220 0.8 /usr/bin/python2 /usr/bin/ipython2
用于内存使用,在open
之前,size
之前和size
之后,确认22MB图像尚未加载到内存中ipython
使用{开始{ {1}})。
然后,这个数字在32538 17252
之后上升到~57k。