0

我使用openCV的addweighted函数将两个图像加在一起

addWeighted(ROI,1,watermark,0.5,0.0,ROI); 

然而,当我尝试做相反的事情时,我得到了黑色的补丁,而不是从结果图像中删除第二个图像。

addWeighted(ROI,1,watermark,-0.5,0.0,ROI);

我也尝试过使用减法,但我得到了相同的结果。下图描述了我在说什么。请注意,我的算法没有正确检测到所有带水印的区域,但是对于那些被正确检测到的区域,我无法从中减去水印。

在此处输入图像描述

如果你们能建议我如何做减法,将不胜感激。

谢谢你。

4

1 回答 1

1

根据addWeighted的文档,你给予一半的权重watermark(你能解释为什么?)并且你的最后一个参数是深度类型......不是数组......所以它应该是 -1 如果watermarkROI是相同的深度,或者你把您想要输入的深度值...如果您在文档中注意到最终值是一个饱和值...也就是说,如果它超过 255,它会被拉低到 255...所以难怪你减去你会赢' t 得到两个确切的值。

** 编辑:** 对你来说,lena 图像I + 0.5W = R在哪里,水印在哪里,结果图像在哪里。由于在 255 以上被截断,因此将 存储在整数矩阵中。由于您使用的是 OpenCV 2.1,因此最好通过扫描图像而不是使用 OpenCV API 来执行加权加法。这样,您可以将 保存在一个整数矩阵中,您可以获得的最大值为 (255 + 255),这将很容易存储。对于显示使用 uchar 矩阵(截断一个)和反转过程使用整数矩阵...IWRRRCV_32UC3R

在此处输入图像描述

于 2013-01-13T08:14:49.657 回答