Примечание: я использую Raspberry Pi Camera Rev1.3, и я установил ее в качестве камеры по умолчанию, и этот код действительно отлично работал на моем ноутбуке с камерой по умолчанию.
сначала я импортировал библиотеки opencv и numpy
Также я ввел 3 шаблона, которые собирался использовать.
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
cv2.namedWindow("cam")
template = cv2.imread('H.png',0)
template2 = cv2.imread('S.png',0)
template3 = cv2.imread('U.png',0)
w, h = template.shape[::-1]
Основная проблема, по-видимому, связана с соответствием шаблона, потому что когда я его удаляю, код работает очень хорошо и показывает действительно плавное видео.
while(True):
ret, frame = cap.read()
frame = cv2.resize(frame, (0,0), fx = 1.25, fy = 1.25)
frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
res = cv2.matchTemplate(frame_gray, template, cv2.TM_CCOEFF_NORMED)
res2 = cv2.matchTemplate(frame_gray, template2, cv2.TM_CCOEFF_NORMED)
res3 = cv2.matchTemplate(frame_gray, template3, cv2.TM_CCOEFF_NORMED)
threshold = 0.7
loc = np.where( res >= threshold)
loc2 = np.where( res2 >= 0.6)
loc3 = np.where( res3 >= 0.6)
for pt in zip(*loc[::-1]):
cv2.rectangle(frame, pt, (pt[0] + w+200, pt[1] + h), (255,0,0), 0)
for pt in zip(*loc2[::-1]):
cv2.rectangle(frame, pt, (pt[0] + w+200, pt[1] + h), (0,255,0), 0)
for pt in zip(*loc3[::-1]):
cv2.rectangle(frame, pt, (pt[0] + w+200, pt[1] + h), (0,0,255), 0)
cv2.imshow("cam", frame)
w = cv2.waitKey(1)
if w & 0xFF == ord('k'):
break
cap.release()
cv2.destroyAllWindows()