首页 > 解决方案 > 如何使用 OpenCV 模板匹配在任何光照条件下查找图像?

问题描述

我正在使用 OpenCV 模板匹配方法来检测 Raspberry Pi 相机捕获的屏幕上的图标。

但是这里的问题是,每当捕获的屏幕的照明条件发生变化时,模板匹配方法将无法识别屏幕上的图标。

注意:我使用的阈值为 0.8。如果我们降低阈值,它会给出错误匹配。

那么有什么解决方案可以消除这两个错误吗?请帮忙。谢谢你。

标签: pythonopencvtemplatesmatching

解决方案


您可能想要的是使用零均值归一化互相关 (ZNCC) 方法运行模板匹配。来自ZNCC 的维基百科部分

对于图像和模板的亮度可能因照明和曝光条件而变化的图像处理应用,可以首先对图像进行归一化。这通常在每一步通过减去平均值并除以标准偏差来完成。

OpenCVmatchTemplate()TM_CCOEFF_NORMED模式中实现了这一点,如此处的文档所示

对于这个工作的一个例子,让我们创建一个空白图像和一个随机模板,我们将把模板放入图像中,只有一半的亮度:

img = np.zeros((100, 100), dtype=np.uint8)
tmp = np.uint8(255*np.random.rand(10, 10))
img[45:55, 45:55] = 0.5 * tmp

现在,使用 ZNCC 方法,我们仍然可以看到响应中的最大 ZNCC 值对应于模板位置:

resp = cv.matchTemplate(img, tmp, cv.TM_CCOEFF_NORMED)
minval, maxval, minloc, maxloc = cv.minMaxLoc(resp)
print(maxloc)  # (45, 45)

推荐阅读