如何在cv2.matchTemplate函数与模板和图像不匹配后停止执行程序?

时间:2016-05-04 10:17:30

标签: python opencv opencv3.0 object-detection

我想在模板匹配方法中创建一个if / else,这样我就可以打印是否有匹配。但是每当函数cv2.matchTemplate没有得到匹配时,它只会抛出一个错误而不是返回一些值。那么如何让它返回一个整数值,以便我可以用它进行比较?基本上,如何阻止它抛出错误,而是在没有匹配的情况下返回一些值?

错误是:cv2.error:/tmp/opencv20160107-54198-1duzac3/opencv-2.4.12/modules/imgproc/src/templmatch.cpp:251:error:(215)img.rows> = templ.rows&&函数matchTemplate中的img.cols> = templ.cols

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg',0)
template = cv2.imread('template.jpg',0)
w, h = template.shape[::-1]

methods = ['cv2.TM_CCOEFF_NORMED','cv2.TM_SQDIFF']
res=cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
if res.any():
    print "match"
else:
    print "no match"

1 个答案:

答案 0 :(得分:0)

  

OpenCV错误:断言失败(img.rows> = templ.rows&& img.cols> = templ.cols)

这表示您的模板尺寸大于您尝试运行匹配的图片,因此我首先尝试调整模板尺寸,然后检查其尺寸。

  

基本上,我如何阻止它抛出错误,而是在没有匹配的情况下返回一些值?

您可以在try块中运行处理代码,并抓住cv2.error exception,例如:

try:
    res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
    if res.any():
        # do your process
except cv2.error as e: 
    # print "No match was found"
    # return something

或者如果您更喜欢这种变体:

try:
    res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
    ok = True
except cv2.error as e: 
    ok = False      

if ok:
    # something