【发布时间】:2017-11-28 14:34:50
【问题描述】:
我正在编写一个裁剪图像并保存它的简单代码。
但是问题是图片的数量在150,000+左右,我想提高速度。
所以,起初我用简单的 for 循环编写了一个代码,如下所示:
import cv2
import numpy
import sys
textfile=sys.argv[1]
file_list=open(textfile)
files=file_list.read().split('\n')
idx=0
for eachfile in files:
image=cv2.imread(eachfile)
idx+=1
if image is None:
pass
outName=eachfile.replace('/data','/changed_data')
if image.shape[0]==256:
image1=image[120:170,120:170]
elif image.shape[0]==50:
image1=image
cv2.imwrite(outName,image1)
print idx,outName
这段代码花了大约 38 秒处理 90000 张图片。 但是,使用双核比单进程花费更多时间,同样的 90000 张图像大约需要 48 秒。
import cv2
import sys
import numpy
from multiprocessing import Pool
def crop(eachfile):
image=cv2.imread(eachfile)
idx+=1
if image is None:
pass
outName=eachfile.replace('/data','/changed_data')
if image.shape[0]==256:
image1=image[120:170,120:170]
elif image.shape[0]==50:
image1=image
cv2.imwrite(outName,image1)
print idx,outName
if __name__=='__main__':
textfile=sys.argv[1]
file_list=open(textfile)
files=file_list.read().split('\n')
pool=Pool(2)
pool.map(crop,files)
我在加快流程方面做得对吗?还是应该拆分列表并将每个列表发送到进程?
任何 cmets 都认为我的代码很棒!!!
提前致谢!!!
【问题讨论】:
-
顺便说一句,程序正在读取文本文件,其中文件由 \n 字符分隔。
标签: python multiprocessing python-multiprocessing opencv3.0