比较两个图像并突出显示第二个图像上的差异

苏曼·苏曼

下面是使用PIL突出显示两个图像之间差异的python当前工作代码。但是其余图像变黑了。

目前,我想显示背景以及突出显示的图像。

无论如何,我可以使节目的背景保持更浅并且仅突出显示差异。

from PIL import Image, ImageChops
point_table = ([0] + ([255] * 255))

def black_or_b(a, b):
    diff = ImageChops.difference(a, b)
    diff = diff.convert('L')
    # diff = diff.point(point_table)
    h,w=diff.size
    new = diff.convert('RGB')
    new.paste(b, mask=diff)
    return new

a = Image.open('i1.png')
b = Image.open('i2.png')
c = black_or_b(a, b)
c.save('diff.png')

https://drive.google.com/file/d/0BylgVQ7RN4ZhTUtUU1hmc1FUVlE/view?usp=sharing

布宜诺斯艾利斯

PIL确实有一些方便的图像处理方法,但是当人们想要开始进行认真的图像处理时,也有很多缺点-

大多数Python专家建议您切换到对像素数据使用NumPy,这将为您提供完全控制-其他图像库(如leptonica,gegl和vips)都具有Python绑定,并且具有用于图像合成/分段的一系列不错的功能。

在这种情况下,我们想像一下如何在图像处理程序中获得所需的输出:您将在原始图像上放置黑色(或其他颜色)阴影,并在其上粘贴第二个图像,但使用阈值(即像素相等或不同-所有中间值应四舍五入为“不同”)作为第二张图像的遮罩。

我修改了您的功能以创建这样的组合-

from PIL import Image, ImageChops, ImageDraw
point_table = ([0] + ([255] * 255))

def new_gray(size, color):
    img = Image.new('L',size)
    dr = ImageDraw.Draw(img)
    dr.rectangle((0,0) + size, color)
    return img

def black_or_b(a, b, opacity=0.85):
    diff = ImageChops.difference(a, b)
    diff = diff.convert('L')
    # Hack: there is no threshold in PILL,
    # so we add the difference with itself to do
    # a poor man's thresholding of the mask: 
    #(the values for equal pixels-  0 - don't add up)
    thresholded_diff = diff
    for repeat in range(3):
        thresholded_diff  = ImageChops.add(thresholded_diff, thresholded_diff)
    h,w = size = diff.size
    mask = new_gray(size, int(255 * (opacity)))
    shade = new_gray(size, 0)
    new = a.copy()
    new.paste(shade, mask=mask)
    # To have the original image show partially
    # on the final result, simply put "diff" instead of thresholded_diff bellow
    new.paste(b, mask=thresholded_diff)
    return new


a = Image.open('a.png')
b = Image.open('b.png')
c = black_or_b(a, b)
c.save('c.png')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较两个表并显示从第二个表中选择的值

jQuery图像滑块两次显示第二个图像

在循环上显示产品库中的第二个WooCommerce图像

awk查找两个文件中第二个字段之间的差异

比较两个 mysql 表的 id 不在第二个列表中

比较两个整数以检查第二个整数是否更大

比较两个文件的第二个字节时出现分段错误

比较两个列表的元素并为第二个列表添加例外?

通过键返回值比较两个JSON,而不是第二个

JS比较两个多维数组并用dirrefences完成第二个

python比较两个列表并保留第二个列表索引

比较两个文件并从第二个文件中获取匹配的行

比较两个文件,同时覆盖第二个文件的大小

第一个抖动图像显示,但第二个不显示

如何将两个图像合并为一个图像,而将两个图像合并为一个透明于第二个图像呢?

在第二个循环中未显示第一个滑块图像

如何比较两个数组,删除第二个中缺少的第一个元素并推送差异

如何从两个表中获取数据,第二个表显示行数

比较两个数组并查找第二个数组中缺少的项目

在第二个LI中获取图像的高度

设置第二个背景图像?

C ++列表屏幕在第二个监视器中显示图像

在第二个活动中传递图像路径并显示它

如何在iOS的第二个Scrollview中显示FirstScrollview图像?

比较两个熊猫列,并返回与第二个元素匹配的第一个的索引

在修改后的原始图像上构成克隆-需要第二个克隆吗?

比较两个数组,并显示第一个数组中具有第二个数组中的键的项

比较两个数组并显示第一个数组中不存在的第二个数组值

比较两个工作表并突出显示差异