使用Python PIL应用蒙版将像素值传输到新图像

时间:2019-03-07 19:01:40

标签: python comparison python-imaging-library pixel mask

PIL和使用Python进行图像处理的新手,可能只是缺少基本功能。

我正在尝试对一个UHD图像应用多个蒙版,以创建仅显示每个蒙版覆盖的像素的多个输出图像。

所有图像都具有完全相同的尺寸,蒙版具有黑色区域。

从我的UHD源图像(取自NaturalEarth的道路图层)中,我想创建一个新的(用于序列)显示透明度和蒙版覆盖的区域的确切像素值。未被掩模遮盖的区域(白色)应完全透明。

我让它正常工作,但是,这要花很长时间,并且我想对1000个以上的蒙版进行此操作,以产生相同数量的最终序列图像。

这是我到目前为止所做的:

from PIL import Image

imgDim = (4096, 2048)
sourceImg = Image.open('4K_roads0p05.png')
imgSeqMasks = ["gcMask_Stockholm_7400.png"]

for img in imgSeqMasks:
    blank_image = Image.new("RGBA", imgDim)
    i = Image.open(str(img))
    rgbai = i.convert('RGBA')

    if i.size == imgDim:        
        for x in range(imgDim[0]):
            for y in range(imgDim[1]):
                r, g, b, a = rgbai.getpixel((x, y))

                if (r, g, b, a) == (0, 0, 0, 255):
                    rsrc, gsrc, bsrc, asrc = sourceImg.getpixel((x, y))
                    blank_image.putpixel((x, y), (rsrc, gsrc, bsrc, asrc))
                blank_image.save('stockholmRoadsAnim_'+str(img)+'.png')

我显然用单个图像替换了mask序列文件夹,然后首先对其进行测试。如果将其设置为x范围(2100,2120)和y范围(450,470),这是结果

good result for area appr. Belgium/Luxembourg

original Image (source image layer)

and one of the many mask images I used for this

这只是20 x 20像素,需要109.763999939 s

有什么想法可以加快速度吗?

0 个答案:

没有答案