我试图在调整大小后将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
似乎您尝试构建一个在每次迭代中生长的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 list(行为不同!),附加新条目并在收集所有图像时构建一个numpy-ray。
类似(未经测试):
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
您会立即找到此瓶颈。