2017-07-04 180 views
0

我有两个灰度png。这些图像具有相同的宽度和高度。如何加速Python PIL图像过滤功能

例如:

image1 image2

我需要以如下方式来过滤这些图像:当从图像1的像素具有从255不同和值在相同的位置处的像素具有值不同于255我想将两个像素存储在两个单独的图像中(imageFiltered1和imageFiltered2)。然后,这两个过滤的图像将创建一个新的图像感谢从ImageChops乘法。

这是我拉到一起的算法:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from PIL import Image, ImageChops 

def makeCustomMultiply(image1, image2): 
    assert image1.size == image2.size 

    imageFiltered1 = Image.new(size=image1.size, mode='L', color=255) 
    imageFiltered2 = Image.new(size=image1.size, mode='L', color=255) 

    for eachY in xrange(0, imageFiltered1.size[1]): 
     for eachX in xrange(0, imageFiltered1.size[0]): 
      pixel1 = image1.getpixel((eachX, eachY)) 
      pixel2 = image2.getpixel((eachX, eachY)) 

      if pixel1 == 255 or pixel2 == 255: 
       imageFiltered1.putpixel((eachX, eachY), 255) 
       imageFiltered2.putpixel((eachX, eachY), 255) 
      else: 
       imageFiltered1.putpixel((eachX, eachY), pixel1) 
       imageFiltered2.putpixel((eachX, eachY), pixel2) 

    combo = ImageChops.multiply(imageFiltered1, imageFiltered2) 
    return combo 

if __name__ == '__main__': 

    image1 = Image.open('image1.png') 
    image2 = Image.open('image2.png') 

    myCustomMultiply = makeCustomMultiply(image1, image2) 
    myCustomMultiply.save('myCustomMultiply.png') 

它基本上是一个多重功能,其中白色黑色/灰色不显示。然后只有灰色到灰色相乘。

我的代码可以改进吗? 我想避免嵌套的for循环,这会减慢我的代码的速度。每次运行我的程序时,必须使用此功能数百次。

感谢

输出继电器:

enter image description here

+0

这是我的函数的输出:

+0

你可能想检查[Code Review](https://codereview.stackexchange.com/) – Tbaki

回答

0

docs

getpixel
...
注意,此方法是相当缓慢;如果您需要处理来自Python的图像的较大部分,则可以使用像素访问对象(请参阅加载)或getdata方法。

或者,要加快你的代码的纯Python部分,尽量用PyPy