Как правильно распределить элементы по списку. OpenCV

import win32gui
import win32api
import win32ui
import win32con#3211922
import cv2
from PIL import Image
from ctypes import windll
import numpy as np
from matplotlib import pyplot as plt
hwnd = win32gui.FindWindow(None, 'Игра')

left, top, right, bot = win32gui.GetWindowRect(hwnd)
w = right - left
h = bot - top

hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC  = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()

saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)

saveDC.SelectObject(saveBitMap)
result = windll.user32.PrintWindow(hwnd, saveDC.GetSafeHdc(), 0)

bmpinfo = saveBitMap.GetInfo()
bmpstr = saveBitMap.GetBitmapBits(True)

im = Image.frombuffer(#Изображение экрана
'RGB',
(bmpinfo['bmWidth'], bmpinfo['bmHeight']),
bmpstr, 'raw', 'BGRX', 0, 1)

win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd, hwndDC)
im.save("test.png")
#######################
lest = ['rock','klab','meloman','yrban','gold','gray','block']#элементы которые ищу
img_rgb = cv2.imread('test.png')#Изображение экрана
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
coordinates = []
for n in range(len(lest)):
    template = cv2.imread(f'images/{lest[n]}.jpg',0)
    w, h = template.shape[::-1]

    res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
    threshold = 0.98#раньше использовал pyautogui похоже на confidence вроде
    loc = np.where( res >= threshold)
    for pt in zip(*loc[::-1]):
        try:
            a = coordinates[-1][0]
            b = pt[0]+w
            hu = b - a
            if hu < 0:
                hu = hu * -1
        except:
            hu = 6
        if hu > 5:#по 3-4 раза обводились элементы с разницей в 1 пиксель вот мой костыль хотя может и лишнее
            coordinates.append((pt[0]+w,pt[1]+h))
            cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 1)
            #print(pt[0]+w,pt[1]+h)

cv2.imwrite('res.png',img_rgb)

В чем проблема. Без понятия как правильно сделать 8 listов где все элементы по полочкам и можно считать так же нужно некоторые элементы которые не нашлись из-за анимации в игре искать повторно, что тоже трудность. Помогите пожалуйста начинающему разобраться в этой куче мала. Заранее спасибо введите сюда описание изображения


Ответы (0 шт):