Задать вопрос
@eisjwowjsks

Можно ли задать условия для работы opencv?

Хочу проверять наличие совпадений на экране и если они есть то выполнять действие
если нету - то переходить к другому
Понимаю только как можно сделать цикл с while, но не понимаю можно ли задать условия (if,else)

код:
import pyautogui
import cv2
import os
import numpy as np
import win32api, win32con
import time


x=176
y=90
width=1067
height=710

right_box = 50
top_box = 50

# Загрузка шаблона
template = cv2.imread('C:/jdws/meo.png')

def red():                
    screenshot = pyautogui.screenshot(region=(x, y, width, height))
    screenshot = np.array(screenshot)
    screenshot = cv2.cvtColor(screenshot, cv2.COLOR_RGB2BGR)
                        
    # Поиск соответствия шаблона на скриншоте
    result = cv2.matchTemplate(screenshot, template, cv2.TM_CCOEFF_NORMED)
            
    # Получение координат максимального значения соответствия
    _, max_val, _, max_loc = cv2.minMaxLoc(result)

    threshold = 0.8  # Пороговое значение (можно настроить)
    if max_val >= threshold:                  
        h, w = template.shape[:2] # height, width шаблона
        # Вычисление координат центра совпадения
        center_x = (x + max_loc[0]) + w // 2
        center_y = (y + max_loc[1]) + h // 2
        right = (center_x + right_box)
        top = (center_y - top_box)

        win32api.SetCursorPos((center_x, center_y))
        pyautogui.click()
        time.sleep(.7)
  • Вопрос задан
  • 63 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Ну и в чём вопрос? У тебя в коде уже есть проверка на силу совпадения (сравнение найденного максимума силы с некоторым порогом). Если тебе нужно выполнять другое действие, то добавь ветку else туда.
Если тебе нужно просто крутить цикл, и выполнять действие, когда изображение найдётся, можешь завернуть в цикл while тело red() или даже просто вызывать её саму в цикле. Условие завершения цикла обдумай сам, я без понятия что ты хочешь сделать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы