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

Python - znajdowanie w obrazie

Object Storage Arubacloud
0 głosów
407 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 (344,860 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 170 wizyt
0 głosów
0 odpowiedzi 274 wizyt
pytanie zadane 4 października 2021 w Python przez Hajpa Użytkownik (880 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...