在几毫秒内加载image.png

时间:2019-11-26 18:42:31

标签: python python-3.x

我需要在不到1秒的时间内对图像执行功能。我在1000x1000图片上遇到了一个问题,只是将其作为矩阵加载到程序中,需要1秒钟。

我用来加载它的函数如下:

import png

def load(fname):

    with open(fname, mode='rb') as f:
        reader = png.Reader(file=f)
        w, h, png_img, _ = reader.asRGB8()
        img = []
        for line in png_img:
            l = []
            for i in range(0, len(line), 3):
                l+=[(line[i], line[i+1], line[i+2])]
            img+=[l]

        return img

我该如何修改它,以使其在打开图像时花费的时间超过几毫秒?

重要说明:我无法导入其他功能(这是一次大学练习,因此有规则-.-)。所以我得自己一个人

3 个答案:

答案 0 :(得分:1)

您可以使用cellForRowAt为您完成此操作,它是高度优化和快速的

PIL

答案 1 :(得分:0)

我不确定是否可以在短短几毫秒内远程运行可打开文件等内容的python脚本。在我的计算机上,最简单的程序需要花费10毫秒的时间

如果不了解问题的具体细节和约束的原因,就很难回答。您应该根据程序的实际工作方式来考虑要做什么,然后制定实现目标的策略。

这里的总上下文是,您要计算机执行以下操作:

  1. 运行python,加载代码并对其进行解释
  2. 加载要使用的任何模块
  3. 找到您的图像文件并从磁盘读取它
  4. 赋予这些字节一些图像抽象的意义-解析等等这些字节
  5. 对图像进行某种变换或“工作”
  6. 以某种方式导出结果

您需要弄清楚哪些步骤真正需要快速实现。之后,也许有人可以提出建议。

答案 2 :(得分:0)

附加到list本质上很慢-请阅读Shlemiel the painter’s algorithm。您可以将其替换为生成器表达式和切片。

    for line in png_img:
        img += list(zip(line[0::3], line[1::3], line[2::3])