python图像到像素转换性能

时间:2017-12-25 22:37:39

标签: python-2.7 numpy image-processing scipy

我想在调整大小后将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

1 个答案:

答案 0 :(得分:0)

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

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-list(行为不同!),在收集所有图像时附加新条目并构建一个numpy-array。

像(未经测试)的东西:

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你会立即发现这个瓶颈。