Image processing 在OpenCV中显示时覆盖图像

Image processing 在OpenCV中显示时覆盖图像,image-processing,opencv,overlay,overlap,Image Processing,Opencv,Overlay,Overlap,我有两个图像,我想显示在彼此的顶部。一个图像是单通道图像,第二个图像是RGB图像,但大部分区域是透明的 如何在不同的功能中生成这两个图像。我知道,要将这些窗口显示在彼此的顶部,我可以在调用cvShowImage()时使用相同的窗口名,但如果它们是从不同的函数中绘制的,则这不起作用。在尝试此操作时,我使用cvtcolor()将二进制图像从单通道转换为RGB,然后显示另一个函数的第二个图像。但这不起作用。两幅图像的尺寸、深度和通道数相同(转换后) 我希望避免将一个图像传入第二个函数,然后再绘制它们。

我有两个图像,我想显示在彼此的顶部。一个图像是单通道图像,第二个图像是RGB图像,但大部分区域是透明的

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

我希望避免将一个图像传入第二个函数,然后再绘制它们。因此,我正在寻找一个快速肮脏的技巧来显示这两个重叠的图像

多谢各位

编辑: 没有办法“覆盖”图像
cvShowImage()
显示内存中的单个图像。你需要把它们混合在一起。有几种方法可以做到这一点。
您可以将一个复制到另一个的1或2个通道中,您可以使用逻辑运算,如AND、or或XOR,您可以使用算术运算,如Add、MULTILY和MULTILYSCALE(这些运算将使大于255的值饱和)。所有这些都可以通过一个可选的遮罩图像来完成,比如你的水滴图像。

当然,您可能希望在第三个缓冲区中执行此操作,以避免覆盖原始文件

我认为那是不可能的。您必须创建新图像或修改现有图像。这里有一篇文章展示了如何做到这一点:

显然现在可以使用OpenCV 2.1版本来完成

您是否正在尝试添加/混合2个图像?不完全是这样,我的第一个图像是一个显示blob的二进制图像,而我的第二个图像包含这些blob的边界框。所以我只想把它们按字面意思展示给对方。我将编辑我上面的帖子来展示这两张图片。谢谢。但我相信只有文字可以覆盖在图像上。请查看解决方案的标记答案。谢谢