从其他图像中删除叠加图像

时间:2015-01-20 08:24:13

标签: python opencv

所以我有两个图像,原始图像和一个应该是它上面的叠加图像。叠加图像是半透明的,比方说白色为alpha 0,5。

我可以用原版覆盖半透明的但我如何扭转这个过程?所以在这个代码示例中,如何通过仅使用'bld'和'fil'变量来获取'org'变量。有没有办法可以做到这一点?

import cv2

import numpy as np
import cv2

# Load a colored image and a filter
org = cv2.imread('original.png', cv2.CV_LOAD_IMAGE_UNCHANGED)
fil = cv2.imread('filter.png', cv2.CV_LOAD_IMAGE_UNCHANGED)

# Overlay the filter on the original image
bld = cv2.addWeighted(org,0.5,fil,0.5,0)

# Reverse the process?

1 个答案:

答案 0 :(得分:3)

嗯...用于线性混合bld = a*org + (1-a)*fil(在您的示例中为a = 0.5

所以org = (bld - (1-a)*fil) / a

如果我没错,那就是org = 1/a * bld + (1-1/a) * fil

a = 0.5org = 2*bld -1*fil

代码:

a = 0.5
org = cv2.addWeighted(bld,1/a,fil,1-1/a, 0)

org = cv2.addWeighted(bld,2,fil,-1, 0)

你也可以使用org = 2*bld - fil但是openCV会截断这些值,如果它们超出了对于8U类型(称为saturate_cast)为255,所以如果你在计算之前没有转换为16/32位类型,这将无法工作。

一般情况下,如果您没有线性混合,则必须将第一个公式更改为bld = a*org + b*fil并从中计算其余公式。