Etsitään kuvasta jokin toinen kuva. Helppoa, cv2:lla.
Se etsii template
-nimisen kuvan image
-nimisestä kuvasta käytännössä liu'uttamalla sitä image
:n päällä. Lopuksi se palauttaa koordinaatit.
Numpy:n funktiolla unravel
tulostetaan ne. Unravel on hieman erikoinen funktio. Alla on toinen, ehkä paremmin toimiva esimerkki.
Unravel:n ulostulon saa printattua helpolla:
for pt in np.unravel_index(result.argmax(), result.shape):
print( pt )
mutta se on vähän monimutkainen;)
import cv2 import numpy as np import pyautogui pyautogui.keyDown('winleft') pyautogui.press('d') pyautogui.keyUp('winleft') image = pyautogui.screenshot() image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) pyautogui.keyDown('winleft') pyautogui.press('d') pyautogui.keyUp('winleft') #Lue ikonin kuva (etsittävä kuva) template = cv2.imread('ikoni.png') w, h, null = template.shape #Sen koko. Tarvitaan laatikon piirtämisessä result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) raja = 0.8 loc = np.where( result >= raja ) # Draw a rectangle around the matched region. for pt in zip(*loc[::-1]): cv2.rectangle(image, pt, (pt[0] + w, pt[1] + h), (0,255,255), 2) cv2.imshow('kuva', image)
Koodi näyttää työpöydän, ottaa kuvakaappauksen, vertaa sitä pikkukuvaan (template) ja etsii ne kohteet, joiden raja-arvo on suurempi kuin 0.8. Sen jälkeen se piirtää suorakaiteen löydettyjen ympärille ja vielä näyttää kuvan.
Alla on on toinen, joka toimivat joissain tapauksissa:, mutta ei aina koska se ei tarkista kuinka hyvin se vastasi alkuperäistä:
#Etsii suurimman ja pienimmän.
#min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
#top_left = max_loc
#bottom_right = (top_left[0] + w, top_left[1] + h)
#cv2.rectangle(image,top_left, bottom_right, 255, 2)
Etsi ikoni ruudulta.
Tuplaklikkaa ikonia aiemmilla opeillasi ja avaa ohjelma.
Etsi kaikki silmät kuvasta.
täydentyy syksyn 2019 aikana