2014-09-29 2 views
0

Я не получаю прямоугольник на объекте, который нужно сопоставить. Может кто-нибудь скажет мне, что случилось с моим кодом или вы можете написать лучший код?Как сопоставить шаблон в реальном времени с помощью камеры с opencv и python?

import cv2 
import numpy as np 


cap = cv2.VideoCapture(0) 
template = cv2.imread('tnmul.jpg',0) 
w, h = template.shape[::-1] 
while(True): 
    ret, frame = cap.read() 
    i= cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    res = cv2.matchTemplate(i,template,2) 
    cv2.imshow('frame',i) 
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) 
    top_left = max_loc 
    bottom_right = (top_left[0] + w, top_left[0] + h) 
    cv2.rectangle(i, top_left, bottom_right, (50, 0, 130), 2) 
    cv2.imshow('output',i) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 
cap.release() 
cv2.destroyAllWindows() 
+0

Каков результат, который вы получаете? Где ошибка? – GPPK

+0

в программе нет ошибки! Он работает, но он не соответствует. Я имею в виду, что он не рисует прямоугольник на изображении, которое нужно сопоставить. В результате он просто продолжает работать в цикле без соответствия –

ответ

0

Так как вы прошли 2 в качестве аргумента в функции matchTemplate, что означает, что вы используете нормированное значение квадрата (CV_TM_SQDIFF_NORMED) для подобия вычислений. Поэтому ваш результат будет сохранен в min_loc. Таким образом, вместо этой линии использовать

top_left = min_loc 

Причина, по которой минимальное значение будет содержать наилучшее совпадение.

Смежные вопросы