【问题标题】:How to extract an image which was blended into another using opencv or PIL in Python如何在 Python 中使用 opencv 或 PIL 提取混合到另一个图像中的图像
【发布时间】:2020-06-09 12:29:44
【问题描述】:

我有一个base 图像和一个result 图像。

“结果”图像是通过将“第二个”图像混合到“基础”图像中创建的。 我正在寻找一种从“结果”图像中提取“第二个”图像的方法。

我试过这段代码:

from PIL import Image, ImageChops
from pathlib import Path

HOME = Path().cwd()

img1 = Image.open(HOME / 'base.png')
img2 = Image.open(HOME / 'result.png')

diff = ImageChops.difference(img2, img1)

diff.show()
diff.save(HOME / 'second.png')

并得到了这张"second" 图像作为两者的区别。

不幸的是,在差异中仍然可以看到基础图像中蓝色水平线和红色垂直线的残留物。 Here is an enlarged section

我该如何摆脱这些?提前感谢您的热心帮助。

【问题讨论】:

  • 对于您展示的示例,您可能只需将所有蓝色和红色像素转换为白色/灰色。或者更简单,只需将图像转换为灰度。
  • 嗨,谢谢你的想法,但这不是我想要的。用数学术语来说,如果我的基础图像的值为 1,结果图像的值为 3,则第二张图像的值为 2,如 1+x=3 -> x = 3-1 但使用 RGBA 上的差异是不正确的,因为我想结果图像不是通过使用添加而是“混合”创建的。所以有一些数学运算进行混合,我正在寻找扭转这些。

标签: python opencv image-processing python-imaging-library


【解决方案1】:

您可以尝试在带有订书钉的图像上使用二进制掩码。

import cv2 

img1 = cv2.imread('AD3iT.png')
img2=cv2.imread('result.png')
diff=cv2.absdiff(img1, img2)
diff=cv2.cvtColor(diff,cv2.COLOR_BGR2GRAY)
mask=cv2.threshold(diff, 20, 255, cv2.THRESH_BINARY )[1]
mask=cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
out=cv2.bitwise_and(img2, mask)

阈值级别,你可能要尝试不同的。

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 2014-08-24
    • 2019-03-26
    • 2020-02-03
    • 2015-08-10
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多