【问题标题】:getting the shape of an image file from python without loading the image从python获取图像文件的形状而不加载图像
【发布时间】:2014-07-08 22:00:09
【问题描述】:
有没有一种有效的方法来知道图像文件的大小(高度、重量、通道),而无需实际将其加载到 python 中?
简单的方法是:
img = cv2.imread('a.jpg')
print img.shape
但这会浪费 CPU(和内存),因为我不需要图像本身。
【问题讨论】:
标签:
python
opencv
python-imaging-library
【解决方案1】:
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开始使用32538 17252)。
然后,该数字在im.load() 之后跃升至 ~57k。