В вашем текущем коде есть много шагов, выполненных несколько раз, где достаточно одного (на кадр). Вы можете получить эффективность, отделяя их.
В настоящее время вы перезагружаете шаблоны в каждом кадре, это очень неэффективно, поскольку вы легко получите 100+ загрузок в секунду. Вместо этого создайте список, содержащий шаблоны, чтобы они оставались в памяти. Доступ из памяти намного быстрее, чем загрузка с диска.
Вы можете сделать то же самое для ширины / длины шаблонов, но на самом деле они не используются в вашем коде, поэтому, возможно, вы можете пропустить все это вместе.
Порог должен быть установлен только один раз.
templates = []
templ_shapes = []
threshold = 0.70
for i in range(6):
templates.append(cv2.imread("bones_{}.png".format(i),0))
templ_shapes.append(templates[i].shape[:: -1])
Все шаблоны можно сравнить с одним и тем же снимком экрана, так что вы должны взять его за пределы цикла for. Это легкая, но довольно большая победа. Поэтому на каждом кадре возьмите экран один раз и сопоставьте все шаблоны. Для наглядности и удобства вы можете поместить его в функцию:
def doTemplateMatch():
img_gray = cv2.cvtColor(imageGrab(), cv2.COLOR_BGR2GRAY)
for template in templates:
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
loc = np.where( res >= threshold)