我正在进行一些图像处理,我需要检查二进制图像是否与另一个图像相同。
处理速度不是问题,我想做的简单事情就是在将图像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)
这个面具是如何工作的?
如何将这两个二进制图像添加到彼此之上?
答案 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中的黑色像素)