简短问题
使用Python图像库时,open()是否立即解压缩图像文件?在
详细信息
我想测量压缩图像(jpeg,png…)的解压时间,因为我读到这应该是一个很好的衡量图像的“复杂性”(一个空白图像将很快被解压缩,一个纯随机图像也将如此,因为它根本不会被压缩,所以最“有趣”的图像应该有最长减压时间)。所以我写了下面的python程序:# complexity.py
from PIL import Image
from cStringIO import StringIO
import time
import sys
def mesure_complexity(image_path, iterations = 10000):
with open(image_path, "rb") as f:
data = f.read()
data_io = StringIO(data)
t1 = time.time()
for i in xrange(iterations):
data_io.seek(0)
Image.open(data_io, "r")
t2 = time.time()
return t2 - t1
def main():
for filepath in sys.argv[1:]:
print filepath, mesure_complexity(filepath)
if __name__ == '__main__':
main()
它可以这样使用:
^{pr2}$
正如你所看到的,我根本没有得到预期的结果,尤其是空白.jpg文件:它应该是“复杂度”最低的文件(解压时间最快)。所以,要么我读到的文章是完全错误的(我真的很怀疑,这是一篇严肃的科学文章),要么皮尔没有做我认为它在做的事情。也许实际的位图转换是在实际需要的时候才完成的?但是为什么open延迟会不同呢?最小的JPG文件当然是空白图像,最大的是随机图像。这真的没有道理。在
注1:当多次运行程序时,我得到的结果大致相同:结果很荒谬,但稳定。;—)
注2:所有图像的大小(宽x高)相同。在
编辑
我只是尝试使用png图像而不是jpeg,现在一切都按预期运行。酷!我刚刚按复杂程度对50幅图像进行了排序,它们看起来越来越“复杂”。我查看了这篇文章(顺便说一句,这是Jean-Paul Delahaye在“Pour la Science”上的一篇文章,2013年4月):作者实际上提到他只使用了无损失压缩算法。所以我想答案是open确实对图像进行了解压缩,但是我的程序没有工作,因为我应该只使用无损算法(png,而不是jpeg)压缩的图像。在