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

era*_*ran 4 python opencv python-imaging-library

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

琐碎的方式是:

img = cv2.imread('a.jpg')
print img.shape
Run Code Online (Sandbox Code Playgroud)

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

jme*_*etz 9

Image.open如果需要,PIL 不会加载图像数据,如文档中所示,

这是一个懒惰的操作; 此函数标识文件,但文件保持打开状态,并且在您尝试处理数据(或调用load()方法)之前,不会从文件中读取实际图像数据.见new().

为了检查这个,ipython我跑了

im = Image.open(filename)
im.size
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

用于内存使用,之前open,之前size和之后size,确认22MB图像尚未加载到内存中(ipython开始使用32538 17252).
然后这个数字随后跃升至约57,000 im.load().