如何知道matchTemplate是否找到了对象?

问题描述 投票:0回答:2

我使用了this答案并编写了自己的程序,但我有一个特定的问题。

如果图像没有对象,

matchTemplate
不会抛出错误,而且我不知道有什么方法来检查
matchTemplate
是否找到对象,任何人都可以给我建议,或者给我一个函数检查这个的名称。

opencv object-detection matchtemplate
2个回答
12
投票

matchTemplate()
返回一个矩阵,其值表示对象位于该像素中心的概率。如果您知道该对象(并且只有一个对象)在那里,您所要做的就是寻找最大值的位置。

如果你不知道,你必须找到最大值,如果它高于某个阈值,你的对象应该在那里。

现在,选择该阈值很棘手 - 由您来专门为您的应用程序找到合适的阈值。当然,您会遇到一些误报(当没有对象,但最大值大于阈值时),以及一些误报(您的对象没有创建足够大的峰值)

选择阈值的方法是收集一个相当大的图像数据库,其中包含有物体和没有物体在里面的图像,统计物体在里面时的峰值有多大,没有物体时的峰值有多大,然后选择最好区分两个类别的阈值


0
投票

在我的项目中,我使用了与多个对象的模板匹配 示例和刚刚检查的“loc”数组的长度之一:

 res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
 threshold = 0.20
 loc = np.where( res >= threshold) 

 if len(loc[0])>0:
     detection = True
 else:
     detection = False
© www.soinside.com 2019 - 2024. All rights reserved.