python - 如何使用 OpenCV 模板匹配在任何光照条件下查找图像?
问题描述
我正在使用 OpenCV 模板匹配方法来检测 Raspberry Pi 相机捕获的屏幕上的图标。
但是这里的问题是,每当捕获的屏幕的照明条件发生变化时,模板匹配方法将无法识别屏幕上的图标。
注意:我使用的阈值为 0.8。如果我们降低阈值,它会给出错误匹配。
那么有什么解决方案可以消除这两个错误吗?请帮忙。谢谢你。
解决方案
您可能想要的是使用零均值归一化互相关 (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)
推荐阅读
- angular - 在 Angular 中显示 formControlName 的验证消息
- javascript - 在浏览器中为 diff2html 创建统一的差异文本
- plot - 如何从 Plotly 中删除轴和数字
- c# - 我可以在基本“虚拟”方法的父类和祖父类中触发“覆盖”方法吗
- dart - 如何让一列包含 2 个文本小部件的列连续位于中心 x 轴的任一侧
- php - PHP 正则表达式按类名匹配多个元素
- c++ - 如何转发声明模板实例成员函数
- r - Shinydashboard,Server.R 不编译“源”行
- python - 如何将单列中的值分配到多列?
- angular - 为什么 ag-grid 复选框的行为是这样的