Python Pillow:如何将一个二进制图像叠加在另一个上面以生成复合图像?

时间:2016-10-14 16:55:01

标签: python image pillow

我正在进行一些图像处理,我需要检查二进制图像是否与另一个图像相同。

处理速度不是问题,我想做的简单事情就是在将图像A的倒数添加到图像B之后计算剩余的白色像素(这些图像非常相似,但不完全 - 将它们评为或多或少相同对我的情况很重要)。

但是,为了创建合成图像,我需要包含一个"掩码"这与两个图像大小相同。

我无法找到在线创建遮罩并将其用于Image.composite功能的示例。

这是我的代码:

compA = ImageOps.invert(imgA)
imgAB = Image.composite(compA,imgB,??? mask)

现在,我已经创建了一个全零的掩码 - 但是,合成图像没有正确显示(A和B都是完全相同的图像;所有零的掩码 - 或者所有零的掩码 - - 不行吗)

mask = Image.fromarray(np.zeros(imgA.size,dtype=int),mode='L')
imgAB = Image.composite(compA,imgB,mask)

这个面具是如何工作的?

如何将这两个二进制图像添加到彼此之上?

1 个答案:

答案 0 :(得分:1)

显然你正在使用numpy,所以为什么不使用numpy数组并明确地在那个域中做你想做的算术 - 例如从另一个中减去一个图像:

arrayA = numpy.asarray( imgA, dtype=int )
arrayB = numpy.asarray( imgB, dtype=int )

arrayDelta = arrayA - arrayB

print( (arrayDelta !=0 ).sum() )  # print the number of non-identical pixels (why count them by hand?)
# NB: this number may be inflated by a factor of 3 if there are 3 identical channels R, G, B

imgDelta = Image.fromarray((numpy.sign(arrayDelta)*127+127).astype('uint8'))  # display this image if you want to visualize where the differences are

你可以更简单地做到这一点,例如。

print((numpy.asarray(imgA) != numpy.asarray(imgB)).sum())

但是我想首先转换为有符号整数类型,然后减去将允许您可视化更多信息(白色和B黑色 - > delta中的白色像素;黑色和B白色 - > delta中的黑色像素)