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

2024-09-30 12:16:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

错误为:cv2.error:/tmp/opencv20160107-54198-1duzac3/opencv-2.4.12/modules/imgproc/src/模板匹配.cpp:251:错误:(-215)图像行>;=模板行&&;图像颜色>;=圣殿骑士团模板匹配中的函数

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"

Tags: 函数图像importgt模板imgifas
1条回答
网友
1楼 · 发布于 2024-09-30 12:16:06

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

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

^{pr2}$

相关问题 更多 >

    热门问题