Bonjour a tous ;

Je viens ici pour vous demander de l'aide , j'ai vraiment essayer beaucoup de " solution possible " , je suis a court d'idée et sa comment a faire
trop de temps que je "cale" sur une seule "fonction" ou "module" , j'en peux plus .

Desolez si la question a deja été posée .

mon but est :

Capturer une partie de l'écran avec mss ,
Faire un cv2.matchTemplate dessus ,
puis ensuite calculer la distance la plus courte a partir d'un point

ce premier scripte fonctionne tres bien mais ne fait pas de screenshot

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
import cv2
import numpy as np
from scipy.spatial.distance import cdist
 
img = cv2.imread('C:\\Users\\Faon\\Documents\\P1\\SalleFm.png')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
template = cv2.imread('C:\\Users\\Faon\\Documents\\P1\\template.PNG',0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.75
loc = np.where( res >= threshold)
#print("res =        ",res)
#print("loc =        ",loc)
 
#Counts the number of found matches, which are currently overlapping
number = np.sum(res >= threshold)
 
coordsFinded = list()
 
count = 0
mask = np.zeros(img.shape[:2], np.uint8)
#print("mask   :",mask)
for pt in zip(*loc[::-1]):
    if mask[pt[1] + h//2, pt[0] + w//2] != 255:
        mask[pt[1]:pt[1]+h, pt[0]:pt[0]+w] = 255
        count += 1
        cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0,255,0), 3)
        rectCoord = (pt[0] + w , pt[1] + h )
        #print(pt)
        #print("rectCoord", rectCoord)
        coordsFinded.append(pt)
 
cv2.imshow('Matches',img)
cv2.waitKey(0) & 0xFF== ord('q')
 
#MODIF , a = le point de referrence pour calculé les distance 
a = np.array([[1036, 746]])   
others = np.array(coordsFinded)
def closest_point(pt, others):
    distances = cdist(pt, others)
    #print (dist(a, others))
    #return others[distances.argmin()]
    winnerClose =  others[distances.argmin()]
    print("the closest point is    : ",winnerClose)
 
closest_point(a, others)
quand j'essaie de simplement ajouté mss dans le jeux cela ne fonctionne plus , les images montrée par imshow sont toutes noir ....

voila le code qui pose probleme , les retours de la consoles ne sont pas utiles car c'est " les images " qui ne se chargent pas ?


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
import cv2
import numpy as np
import mss 
import time
import numpy as np
from scipy.spatial.distance import cdist
 
time.sleep(10)
################################################################################
def screen_template_closest ()  :   
    with mss.mss() as sct:
 
             # Part of the screen to capture 
             monitor = {"top": 1059, "left": 62, "width": 285, "height": 640}
 
             #Get raw pixels from the screen, save it to a Numpy array
             img = np.array(sct.grab(monitor))
             print("image shape",img.shape)
 
    # Display the picture
    cv2.imshow("OpenCV/Numpy normal", img)
    # Display the picture in grayscale
    cv2.imshow('OpenCV/Numpy grayscale',cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY))
 
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
    template = cv2.imread('C:\\Users\\Faon\\projetadminEnv3\\test\\templates.PNG',0)
    w, h = template.shape[::-1]
    res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
    threshold = 0.75
    #Counts the number of found matches, which are currently overlapping
    loc = np.where( res >= threshold)
 
    coordsFinded = list()
    count = 0
    mask = np.zeros(img.shape[:2], np.uint8)
 
    for pt in zip(*loc[::-1]):
        if mask[pt[1] + h//2, pt[0] + w//2] != 255:
            mask[pt[1]:pt[1]+h, pt[0]:pt[0]+w] = 255
            count += 1
            cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0,255,0), 3)
            coordsFinded.append(pt)
 
    cv2.imshow('Matches',img)
    cv2.waitKey(0) & 0xFF== ord('q')
 
    #closest distance from pta
    pta = np.array([[1036, 746]])   
    others1 = np.array(coordsFinded)
    print("others (all coords of finded images ) ",others1)
    distances = cdist(pta, others1)
 
    winnerClose =  others1[distances.argmin()]
    print("the closest point is    : ",winnerClose)      
####
print(screen_template_closest())
A l'aide svp , pourquoi cela ne fonctionne pas ?
Merci d'avances !