【问题标题】:How to find an image at any lighting conditions using OpenCV template Matching?如何使用 OpenCV 模板匹配在任何光照条件下查找图像?
【发布时间】:2019-12-11 20:27:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您能否提供一些代码或示例来更好地理解您的问题?
  • 将您的图像发布到一些免费的托管服务,并将 URL 放在这里,这样我们就可以看到您的图像类型和照明变化。一种建议是将图像转换为边缘,然后将边缘与模板匹配进行匹配。

标签: python opencv templates matching


【解决方案1】:

您可能想要使用零均值归一化互相关 (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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2016-11-22
    • 2021-06-11
    • 2011-04-02
    • 2015-09-21
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多