使用OpenCv的矩阵运算(加法和减法)OpenCV C ++

时间:2013-01-13 07:39:11

标签: c++ image-processing opencv c++11

我使用openCV

的加权函数将两个图像加在一起
addWeighted(ROI,1,watermark,0.5,0.0,ROI); 

然而,当我尝试反过来时,我会得到黑色补丁而不是从结果图像中移除第二个图像。

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

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

enter image description here

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

谢谢。

1 个答案:

答案 0 :(得分:1)

根据docs of addWeighted,你给watermark一半的权重(你可以解释原因吗?),你的最后一个参数是深度类型......不是数组......所以它应该是-1,如果watermarkROI具有相同的深度,或者您放置了想要放置的深度值...如果您在文档中注明最终值是饱和值...即如果它超过255它被拉到255 ...所以难怪你减去你不会得到两个确切的值。

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

enter image description here