【发布时间】:2012-09-10 13:12:16
【问题描述】:
上下文
我经常发现自己处于以下情况:
- 我有一个需要处理的图像文件名列表
- 我使用例如 scipy.misc.imread 顺序读取每个图像
- 然后我对每张图像进行某种处理并返回一个结果
- 我将结果沿图像文件名保存到一个书架中
问题在于,简单地读取图像会花费不可忽略的时间,有时与图像处理相比甚至更长。
问题
所以我认为理想情况下我可以在处理图像 n 时读取图像 n + 1。或者以自动确定的最佳方式一次更好地处理和读取多张图像?
我读过有关多处理、线程、扭曲、gevent 等的信息,但我不知道该使用哪一个以及如何实现这个想法。有没有人可以解决这类问题?
小例子
# generate a list of images
scipy.misc.imsave("lena.png", scipy.misc.lena())
files = ['lena.png'] * 100
# a simple image processing task
def process_image(im, threshold=128):
label, n = scipy.ndimage.label(im > threshold)
return n
# my current main loop
for f in files:
im = scipy.misc.imread(f)
print process_image(im)
【问题讨论】:
-
从使用
Queue的线程工作池开始。然后,一旦你完成了这项工作并理解了它,如果需要,就可以使用其他方法。 -
多线程通常会产生令人失望的 Python 多核性能扩展;多处理是要走的路(见菲利普的回答)。
标签: python image-processing asynchronous numpy scipy