【问题标题】:python image to pixel conversion performancepython图像到像素的转换性能
【发布时间】:2018-06-06 22:26:14
【问题描述】:

我试图在调整大小后将 jpeg 转换为像素。该程序适用于较少的图像。当我尝试使用更多图像(例如 10k)时,它会运行 2 到 3 个小时。有没有办法提高性能?

import os as s
import numpy as np
import scipy
from PIL import Image
from scipy import ndimage
import warnings
warnings.filterwarnings('ignore')
def imaget_to_pxl(path,size):
    img_to_pxls=np.zeros(shape=(1,size*size*3))
    img_name={'name':0}
    N=1
    #print img_to_pxls.shape
    for i in s.listdir(path):
        if i.endswith('.jpg'):
            new_size=(size,size)
            im = Image.open(path+i, 'r')#.resize(new_size)
            pixel_values = list(im.getdata())
            if im.mode == 'RGB':
                my_image = scipy.misc.imresize(im, size=new_size)#.reshape((1,-1))
                img_to_pxls=np.concatenate((img_to_pxls,my_image.reshape((1,-1))))

    return img_to_pxls

【问题讨论】:

    标签: python-2.7 numpy image-processing scipy


    【解决方案1】:

    您似乎尝试构建一个在每次迭代中都在增长的 numpy-array。这是您应该不惜一切代价避免的事情!

    img_to_pxls=np.zeros(shape=(1,size*size*3))
        # later loop
        my_image = scipy.misc.imresize(im, size=new_size)#.reshape((1,-1))
        img_to_pxls=np.concatenate((img_to_pxls,my_image.reshape((1,-1))))  # !
    

    请注意,调整 numpy-array 的大小会影响分配新数组(增加大小)并复制所有值!这将在数​​组越来越大的每次迭代中发生。

    img_to_pxls 设为一个python 列表(其行为不同!),添加新条目并在收集所有图像后构建一个numpy 数组。

    类似的东西(未经测试):

    img_to_pxls = []
    ...
        my_image = scipy.misc.imresize(im, size=new_size)#.reshape((1,-1))
        img_to_pxls.append(my_image)
    ...
    return np.array(img_to_pxls)
    

    在尝试优化任何内容之前,请始终使用一些分析工具来检查代码中的慢速部分。例如使用line_profiler,您会立即发现这个瓶颈。

    【讨论】:

    • 感谢您的解释和解决方案。它工作了!!!。正如你所说,当我将图像限制为 2k 时没有太大差异,当我使用 5k 时,我观察到明显的差异。再次感谢一个问题:我对python非常陌生,只是想知道需要多长时间才能获得如此深刻的理解(如果这是基本的,你可能会知道我在python方面有多糟糕)你介意推荐书籍/参考文献
    • @ulab 在这种情况下,它只是对数据结构(连续数组;如果有人以前做过一些 C/C++ 会有所帮助)和阅读相关文档(什么是 python 列表)有一个基本的了解,什么是 numpy 数组)。不知道最好的方法是学习这个。当然,在某些领域关注流行的 Stackoverflow 问题也不会受到伤害(例如许多有趣的 numpy 问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多