OpenCV模板匹配和透明度
computer-vision
image-processing
opencv
5
0

在模板匹配期间,OpenCV处理图像透明度的方式是什么?

问题在于模板图像需要具有透明部分,因为在原始图像中,这些位置可能有任何东西。

我尝试了所有方法,但没有一个产生积极的结果(例如,模板在原始图像中的位置未正确检测到)。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

似乎OpenCV不能按您希望的方式处理alpha。

您有两种选择:

  1. 编写自己的互相关方法,该方法将使用Alpha通道
  2. 变换图像,使您的Alpha通道不相关

由于第一个选项很简单,因此我将在这里探讨第二个选项。我将重复使用之前提供给类似问题的示例代码。如果直接将互相关应用于图像,则背景会干扰模板匹配(尤其是浅色背景部分)。如果您使用颜色通道,则会发现蓝色通道中的匹配会给出正确的结果。这取决于图像的内容,而不是解决问题的一致方法。

另一个选择是对图像和模板执行边缘检测(例如Sobel ),然后执行互相关。这是边缘检测的图像(我在GIMP的Luma通道上使用了Sobel边缘检测器,然后进行了一些强度拉伸)。

地图

建造

如您所见,此处的Alpha通道已变得无关紧要,因为大多数地形已变为零强度,并且不会有助于互相关计算。因此,现在可以直接应用互相关,从而得到所需的结果:

misha@misha-desktop:~/Desktop/stackoverflow$ python cross-correlation.py map-blue.png building-maskz-blue.png 
(163, 244)

最后,这是另一个相关的问题

PS。这是什么游戏?

收藏
评论

对于这个问题,我有一个稍微有点脑瘫的解决方案,它似乎确实运行得很好:用噪声替换模板图像的alpha通道,这或多或少会使透明区域在匹配过程中在统计上不重要。

例如,我的用例涉及在iOS的屏幕截图中搜索表情符号字符。 iOS键盘背景会根据上下文更改颜色,如果您在模板图像中使用特定的背景色,则匹配过程会出现问题。

这是alpha上的原始模板图像:
Alpha上的原始模板图像

这是经过处理的模板,其中为Alpha通道填充了噪声:
在此处输入图片说明

我通过OpenCV文档中提供的模板匹配示例代码发送了处理后的模板图像。在深色或浅色背景上,都能以合理的置信度找到匹配项。

在深色背景上搜索:

暗配

在浅色背景上搜索:

配上光

相比之下,将模板的Alpha通道保持透明(或承诺使用深色或浅色背景)不会返回可接受的匹配项。

收藏
评论

OpenCV 3.0提供了对模板与蒙版模板匹配的本地支持。请参阅新文档

参数:

图片 ...

庙宇...

结果...

方法 ...

遮罩搜索模板的遮罩 。它必须与templ具有相同的数据类型和大小。默认情况下未设置。

[轻微题外话]

请注意,模板无法与遮罩的参考图像(较大的图像)匹配。这很有意义,因为OpenCV使用基于FFT的模板匹配。

因此,如果仅需要在参考图像的特定区域执行模板匹配,则将需要为此实现自己的方法或屏蔽cv :: matchTemplate的输出。

从头开始实施它应该可以弥补您只想在非常特定的区域(即,在harris角落附近)搜索模板的情况。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号