IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

ScreenshotMss Cv2.matchTemplate distance euclidienne Python


Sujet :

OpenCV

  1. #1
    Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Juin 2022
    Messages : 2
    Points : 3
    Points
    3
    Par défaut ScreenshotMss Cv2.matchTemplate distance euclidienne Python
    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 !

  2. #2
    Candidat au Club
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Juin 2022
    Messages : 2
    Points : 3
    Points
    3
    Par défaut C'était tout simple ...
    Bonjour , ben enfaite , ce qui n'allait pas étais simplement les coordonnée du screenshot que j'avais inversé (top et left inversé )

    donc cela n'affichait du noir et je pensait qu'il y avait un problème ....


    Donc voila , résolu , désolez d'avoir poster dans la mauvaise section ( c et c++ ) je n'avait pas remarquer au moment du post .


    pour allé plus loin :
    juste que les coordonnées donner par cv2.matchTemplate sont dans la partie du screenshot , pour avoir les coordonée réelle il faut
    ajouté la valeur de top [du rectangle (monitor )] au y du point trouvé , et ajoute left au x du point trouvé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Distance euclidienne entre deux vecteurs
    Par soumiaguelma dans le forum MATLAB
    Réponses: 3
    Dernier message: 26/04/2008, 10h32
  2. Distance euclidienne entre 2 matrices
    Par azerty09 dans le forum MATLAB
    Réponses: 1
    Dernier message: 19/02/2008, 18h43
  3. Distance Euclidienne ou L1?
    Par nonoprig dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/02/2008, 16h54
  4. Distance euclidienne entre deux vecteurs
    Par larimoise dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/04/2007, 22h44
  5. Distance euclidienne & distance Mahalanobis
    Par hanane78 dans le forum MATLAB
    Réponses: 9
    Dernier message: 27/03/2007, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo