在 OpenCV 中加法混合两个部分重叠的图像

Posted

技术标签:

【中文标题】在 OpenCV 中加法混合两个部分重叠的图像【英文标题】:Additively blend two partially overlapping images in OpenCV 【发布时间】:2017-06-09 10:32:43 【问题描述】:

我该如何进行合成:

image A (8x8 RGB) with top left corner at (0,0).  
image B (4x4 RGB) with top left corner at (6,6).

通过简单地添加 RGB 值?

我想我需要先创建一个大小为 (10,10) 的(黑色)RGB 画布,然后将每个图像添加到其各自的位置。

但是如何完成第二步呢?

现在如果偏移量是 (6.3, 6.3) 怎么办?有没有处理亚像素叠加的技术?

编辑:cvSetImageROI 也许?

【问题讨论】:

处理混合有不同的技术,通常使用的是简单的常量混合(如因子 0.5 的 addWeighted)或重叠部分的线性交叉混合。看看我在***.com/questions/22315904/… 中的回答,了解如何使用/解决某种线性交叉混合。要“纠正”某些子像素偏移,您可以使用图像变形,这将使用插值。这也可以纠正旋转和缩放的一些偏移。 @Micka 在那篇文章中有一些很好的答案! 【参考方案1】:

为什么不使用addWeighted() 来混合图像?您可以在较大图像中创建与较小图像相同大小的 ROI,然后将结果添加到那里。

据我所知,您无法使用内置函数实现亚像素精度。如果您添加了仅部分覆盖它的图像,那么像素 (6,6) 的结果会是什么?您希望它按重叠量加权吗?那么像素(7,7) 呢?在这种情况下,将有四个像素交叉;是否应根据重叠量对每个添加进行加权?

如果您确实希望这些像素如此加权,定义您自己的方法不会太难,但会有点乏味,因为您有很多情况:角落、侧面和内部会每个都有不同的权重。

【讨论】:

以上是关于在 OpenCV 中加法混合两个部分重叠的图像的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenCV 中对齐两个图像

Python 大白从零开始 OpenCV 学习课-4.图像的叠加与混合

合并两个或多个部分重叠的图像

OpenCV:如何混合多个不同颜色的半透明多边形?

OpenCV(C++)图像运算

OpenCV 函数学习15-图像的加权加法(cv2.addWeight)