从python获取图像文件的形状而不加载图像

时间:2014-05-20 14:53:43

标签: python opencv python-imaging-library

有没有一种有效的方法来了解图像文件的大小(高度,重量,通道),而无需将其实际加载到python中?

琐碎的方式是:

img = cv2.imread('a.jpg')
print img.shape

但这会浪费CPU(和内存),因为我不需要图像本身。

1 个答案:

答案 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。