2016-05-04 125 views
1

テンプレート一致方法でif/elseを作成したいので、一致するかどうかを確認して印刷できます。しかし、関数cv2.matchTemplateがマッチしなかった場合は、何らかの値を返す代わりに単にエラーをスローします。だから私はそれを比較のために使うことができるように整数値を返してもらうにはどうすればいいですか?基本的には、エラーを投げないようにして、代わりに一致しない場合には何らかの値を返します。cv2.matchTemplate関数がテンプレートとイメージに一致しないためにプログラムが実行されないようにする方法はありますか?

エラーは次のとおりです。cv2.error:/tmp/opencv20160107-54198-1duzac3/opencv-2.4.12/modules/imgproc/src/templmatch.cpp:251:エラー:(-215)img.rows> =関数matchTemplateで& & img.cols> = templ.colsをtempl.rows

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" 

答えて

0

OpenCV Error: Assertion failed (img.rows >= templ.rows && img.cols >= templ.cols)

これは、テンプレートのサイズはあなたが試合を実行しようとしている画像よりも大きいことを示唆しているので、私は」最初にテンプレートのサイズを調整してから寸法を確認してください。

Basically, how do I stop it from throwing an error and instead return some value in case of no match?

あなたはtryブロック内の処理コード自体を実行し、キャッチすることができcv2.errorexception、例えば:

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 
+0

OpenCV Error:アサーションに失敗しました(img.rows> = templ.rows && img.cols> = templ.cols)、matchTemplateファイル/ tmp /opencv20160107-54198-1duzac3/opencv-2.4.12/modules/imgproc/src/templmatch.cpp、line 251 –

+0

こんにちは、私はこの答えの範囲を停止を止めないようにキャッチするつもりですあなたのプログラムの流れ。問題が解決した場合は、この回答を受け入れて、別の質問(例:画像ファイル)を投稿して、エラーを再現して修正をお願いします。 – bakkal

+0

しかし、それはどのように見えますか、あなたのテンプレートは、あなたが一致を実行したい画像より大きいサイズのものと思われます – bakkal

関連する問題