Разница между 2 изображениями с прозрачностью - PullRequest
0 голосов
/ 09 октября 2018

У меня есть следующие 2 изображения

image 1 image 2

И я пытаюсь добиться следующего результата (изображение имеет прозрачность).

difference

Мое текущее решение состоит в том, чтобы «перебить» разницу, но она действительно неэффективна.(prev и curr являются Image объектами).

def compare(prev, curr):
    out = PIL.Image.new("RGBA", curr.size)
    width, height = curr.size
    for x in range(width):
        for y in range(height):
            if prev.getpixel((x, y)) == curr.getpixel((x, y)):
                out.putpixel((x, y), (0, 0, 0, 0))
            else:
                out.putpixel((x, y), (*curr.getpixel((x,y)),))
    return out

У меня есть доступ к PIL и numpy.Есть ли лучший способ использовать эти 2 библиотеки?

1 Ответ

0 голосов
/ 09 октября 2018

curr* np.any(prev!=curr, axis=2, keep_dims=True)

Если curr и prev являются массивами с нулевыми значениями и вы хотите заменить на 0 при индексах, где curr==prev, то вы можете сделать np.any(prev!=curr, axis=2), чтобы получить двоичную маску, котораябудет 1, где prev и curr не равны, а ноль в другом месте.и тогда вы можете умножить его на curr.

...