python - cv2.matchTemplate 函数与模板和图像不匹配后,如何阻止程序执行?

标签 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 && img.cols >= templ.cols 函数 matchTemplate

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"

最佳答案

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 block 中运行处理代码本身,并捕获 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

关于python - cv2.matchTemplate 函数与模板和图像不匹配后,如何阻止程序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37024823/

相关文章:

python-2.7 - DrawKeypoints 函数不适用于 OpenCV3.0/Python 2.7

python - Django 管理仪表板,无法记录 "select all"

python - 在世界杯锦标赛组内生成配对

python - TinyMCE 与 Django : "This field is required"

python - 如何保存大型Python numpy数据集?

java - 如何使用ARCore识别盒子?

opencv - 如何使用一些 ML 技术使用可用的 ROI 掩码从真菌图像中提取 ROI

python - 自动泊车位检测-如何使用OpenCV和Python初始化泊车位图/空间

c++ - 与 OpenCV 3.0 捆绑在一起的 IPPCV 包是否包含所有可能的 ipp 相关改进以运行 OpenCV 函数?

python - 如何向类中添加前/后方法。 Python