【问题标题】: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(和内存),因为我不需要图像本身。

【问题讨论】:

  • 在 JPEG 的情况下,这不是微不足道的,因为图像属性不是以简单的、易于阅读的格式存储的。相反,JPEG 数据存储为段的串联。我发现这个答案很有趣:(stackoverflow.com/a/18264693/2863154)

标签: 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2016-06-08
    • 2015-01-07
    • 2013-03-25
    相关资源
    最近更新 更多