3

我有两张图像要叠加显示。一个图像是单通道图像,第二个图像是 RGB 图像,但大部分区域是透明的。

这两个图像是如何在不同的函数中生成的。我知道只是将这些显示在彼此之上,我可以在调用时使用相同的窗口名称,cvShowImage()但是当它们从不同的函数中绘制时这不起作用。尝试此操作时,我曾经cvCvtcolor()将二进制图像从单通道转换为 RGB,然后从另一个函数显示第二个图像。但这没有用。两幅图像的尺寸、深度和通道数相同(转换后)。

我想避免将一个图像传递给第二个函数然后绘制它们。所以我正在寻找一个快速的肮脏技巧来显示这两个重叠的图像。

谢谢

编辑: 替代文字

4

3 回答 3

1

没有办法“叠加”图像。cvShowImage()显示内存中的单个图像。您需要将它们混合/组合在一起。有几种方法可以做到这一点。
您可以将一个复制到另一个的 1 或 2 个通道中,可以使用 AND、OR 或 XOR 等逻辑运算,可以使用 Add、Multiply 和 MultiplyScale 等算术运算(这些运算将使大于 255 的值饱和)。所有这些也可以使用可选的蒙版图像(如您的 blob 图像)来完成。
当然,您可能希望在第三个缓冲区中执行此操作,以免覆盖您的原件。

于 2011-01-05T17:17:40.577 回答
1

我不认为这是可能的。您必须创建新图像或修改现有图像。这是一篇展示如何执行此操作的文章:OpenCV 中的透明图像叠加

于 2011-01-06T17:45:36.650 回答
0

显然现在可以使用 OpenCV 2.1 版本 http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html#cv-displayoverlay

于 2011-01-28T09:19:48.407 回答