我使用openCV
的加权函数将两个图像加在一起addWeighted(ROI,1,watermark,0.5,0.0,ROI);
然而,当我尝试反过来时,我会得到黑色补丁而不是从结果图像中移除第二个图像。
addWeighted(ROI,1,watermark,-0.5,0.0,ROI);
我也试过使用减法,但我得到了相同的结果。 下图描述了我在说什么。 请注意我的算法没有正确检测所有水印区域,但对于那些被正确检测到的区域,我无法从中减去水印。
如果你们能告诉我如何做减法,我们将不胜感激。
谢谢。
答案 0 :(得分:1)
根据docs of addWeighted,你给watermark
一半的权重(你可以解释原因吗?),你的最后一个参数是深度类型......不是数组......所以它应该是-1,如果watermark
和ROI
具有相同的深度,或者您放置了想要放置的深度值...如果您在文档中注明最终值是饱和值...即如果它超过255它被拉到255 ...所以难怪你减去你不会得到两个确切的值。
**编辑:**
对于I + 0.5W = R
,其中I
是lena图像,W
是水印,R
是结果图像。由于R
被截断超过255,因此将R
存储在整数矩阵CV_32UC3
中。由于您使用的是OpenCV 2.1,因此最好通过扫描图像而不是使用OpenCV API来执行加权添加。这样你可以将R
保存在一个整数矩阵中,你可以得到的最大值是(255 + 255),这将很容易存储。对于显示使用uchar矩阵(截断的)和反转过程使用整数矩阵...