我使用了this答案并编写了自己的程序,但我有一个特定的问题。
如果图像没有对象,
matchTemplate
不会抛出错误,而且我不知道有什么方法来检查matchTemplate
是否找到对象,任何人都可以给我建议,或者给我一个函数检查这个的名称。
matchTemplate()
返回一个矩阵,其值表示对象位于该像素中心的概率。如果您知道该对象(并且只有一个对象)在那里,您所要做的就是寻找最大值的位置。
如果你不知道,你必须找到最大值,如果它高于某个阈值,你的对象应该在那里。
现在,选择该阈值很棘手 - 由您来专门为您的应用程序找到合适的阈值。当然,您会遇到一些误报(当没有对象,但最大值大于阈值时),以及一些误报(您的对象没有创建足够大的峰值)
选择阈值的方法是收集一个相当大的图像数据库,其中包含有物体和没有物体在里面的图像,统计物体在里面时的峰值有多大,没有物体时的峰值有多大,然后选择最好区分两个类别的阈值
在我的项目中,我使用了与多个对象的模板匹配 示例和刚刚检查的“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