• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python - znajdowanie w obrazie

0 głosów
101 wizyt
pytanie zadane 21 maja 2020 w Python przez niezalogowany
otwarte ponownie 21 maja 2020

Witajcie!
Właśnie tworzę swój mały projekt w Pythonie i natrafiłem na pewien problem. Program operuje na grafice, więc chciałem aby wykrywał pojedyncze elementy na obrazie z szablonu (np. kwadrat wśród obrazka z figurami). Znalazłem taki oto kod wykorzystujący OpenCV do tego procesu:
 

import cv2
import numpy as np

img_rgb = cv2.imread('mario.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('mario_coin.png',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

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

Obraz mario.png to miejsce, gdzie ma zostać wyszukany, że tak to ujmę, mniejszy obraz który nazywa się mario_coin.png (więcej tutaj). Moje pytanie brzmi, jak odczytać koordynaty x i y znalezionego wycinku obrazka w tym większym. Czyli np. kwadrat z pierwszego przykładu jest blisko lewego górnego rogu większego obrazu, to jego koordynaty będą miały wartości np. 12 i 15.

Z góry dzięki za odpowiedź.

PS. Jestem w takich algorytmach zielony, więc jeśli coś źle napisałem to wybaczcie :)

1 odpowiedź

0 głosów
odpowiedź 21 maja 2020 przez adrian17 Ekspert (320,760 p.)
wybrane 21 maja 2020
 
Najlepsza

Nie znam dobrze OpenCV, ale na intuicję...

for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

ta linia rysuje prostokąty w miejscach w którym znalazł monetę, więc wygląda że drugi i trzeci parametr funkcji rectangle() to koordynaty rogów tego prostokąta.

komentarz 21 maja 2020 przez niezalogowany
Faktycznie działa. Czasem wystarczy pomyśleć (i zajrzeć do dokumentacji). Dzięki!
Teraz tylko usunąć zapisywanie się obrazka i funkcja gotowa :D

Podobne pytania

+3 głosów
0 odpowiedzi 148 wizyt
0 głosów
0 odpowiedzi 88 wizyt
pytanie zadane 4 października 2021 w Python przez Hajpa Użytkownik (730 p.)

88,355 zapytań

136,952 odpowiedzi

305,669 komentarzy

58,619 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...