如何使用OpenCV模板匹配在任何光照条件下查找图像?

时间:2019-08-03 15:10:05

标签: python opencv templates matching

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

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

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

那么有什么办法可以消除这两个错误?请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

您可能想要的是使用零均值标准化互相关(ZNCC)方法运行模板匹配。来自Wikipedia section on ZNCC

  

对于图像处理和模板的亮度可能会由于光照和曝光条件而变化的图像处理应用程序,可以先将图像标准化。通常,在每个步骤中都要减去平均值,然后除以标准偏差。

OpenCV以matchTemplate()模式在TM_CCOEFF_NORMED中实现此功能,如文档here中所示。

作为此工作的示例,让我们创建一个空白图像和一个随机模板,然后将模板放到图像中,只用一半的亮度:

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)