【发布时间】:2018-01-16 18:39:44
【问题描述】:
我想用 PIL 打开一个图像并将每个像素映射到一个新颜色(通过一个更复杂的函数,它本质上将 rgb 值作为一个元组返回一个新的 rgb 值元组),假设我想要每个像素映射到随机的 RGB 颜色(该参数只是为了使其与map 兼容):
import random
def rand_rgb(*_) -> tuple:
return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
我想做的是使用一些(最好是)高级并行性,例如multiprocessing:
import multiprocessing
def row_rand_rgb(pixelrow: list) -> list:
return list(map(rand_rgb, pixelrow)
with PIL.Image.open(imgname) as im:
width, height = im.size
pixelaccess = im.load()
pixelaccess = multiprocessing.Pool().map(row_rand_rgb, pixelaccess)
im.save()
如果pixelaccess 是“普通”Python 矩阵,即列表列表,那么这种类型的东西会起作用,并且图像中的每一行像素都会被单独处理,但这并不完全有效因为据我所知,pixel access object 不是列表列表。
我应该如何进行并行化?
【问题讨论】:
标签: python image image-processing parallel-processing multiprocessing