Wpis z mikrobloga

Czy ktoś korzystał ze skimage aka scikit-image? Chciałbym, aby funkcja zwracała TRUE jeśli pattern występuje (chociaż raz) w box, ale narazie nie mogę przeskoczyć elementu x,y = ij[::-1], który zwraca mi ValueError: too many values to unpack (expected 2)

Uprzedzam- nie trzeba tłumaczyć; rozumiem znacznie, ale jak rozwiązać ten problem?

Dzieki za podpowiedzi

from skimage import io
from skimage.feature import match_template
import numpy as np

box = io.imread("/Users/farmaceut/Desktop/box.png")
pattern = io.imread("/Users/farmaceut/Desktop/pattern.png")

result = match_template(box, pattern)

ij = np.unravel_index(np.argmax(result), result.shape)
x,y = ij[::-1]
#python #programowanie #naukaprogramowania #programista15k #it
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@farmaceut: Po szybkim spojrzeniu w dokumentację, mój strzał jest taki:
normalnie np.unravel_index zwraca w ten sposób:

np.unravel_index([22, 41, 37], (7,6))
(array([3, 6, 6]), array([4, 5, 1]))

ale wyjątkowo, gdy pierwszy argument jest pojedynczą liczbą, to wtedy
  • Odpowiedz
@farmaceut: Nie jestem pewien i nie mam teraz okazji skompilować tego kodu, ale na moje oko to problem leży w tym, że Twój obraz jest RGB, a nie GRAY (3 kanały vs 1 kanał). Więc ostatnia linijka nie zwraca Ci jednego zestawu koordynatów tylko 3 - na każdy kanał obrazu, stad masz ten Error.
  • Odpowiedz
@ProfesorBigos: Okej, zerknę... szkoda, że nawet nie umiem sobie wyjaśnić CO właściwie robi np.unravel_index
@kkthxbb: Mhmmm... możesz mieć rację, aczkolwiek wzorowałem się trochę na tutku z dokumentacji, a tam nie przerabiali na jeden kanał... zrobię to i odpalę ponownie.
  • Odpowiedz
@Pmpa: hej! podmieniłem na opencv i jest lepiej! Teraz borykam się z wynajdywaniem wzorca na obrazku gdzie go nie ma, oraz zapewnieniem jak najlepszej wydajności ( ͡° ͜ʖ ͡°) trochę to trwa...
  • Odpowiedz
@farmaceut: wszystko jest na tym kanale kolejny odcinek o HSV zamiast RGB bardzo ciekawy. Co prawda jezeli chcesz znalezc wiecej niz 5 obrazkow na full hd obrazku to zapomnij o czasie rzeczywistym, sam to przerabialem i akutalnie przeszedlem na easyocr, a docelowo jakies klasyfikatory obrazkow.
  • Odpowiedz
@Pmpa: Muszę pogodzić wydajność z jakością, aczkolwiek zawsze najbardziej zależy na drugim... To jest prawie 1000 plikow png o wymiarach 100x100... po każdym chce iterować i porównywać czy na obrazku wyjściowym (.png, 750x1300) znajduje raz. Wystarczy, żeby raz znalazł i dalej szukać nie musi. Patrzyłem na HSV, wydajność większa, ale niestety drastycznie wydłuża w czasie!

edit: rzeczywiscie... nowy, fajny kanał. dzieki!
farmaceut - @Pmpa: Muszę pogodzić wydajność z jakością, aczkolwiek zawsze najbardziej...

źródło: comment_1595449523Z3ziUEtKEOLQ0Omak71LQX.jpg

Pobierz
  • Odpowiedz
@Pmpa: próbowałem różne kombinacje – tylko opencv, tylko skimage, mieszane (troche to, troche tamto)... ciezko cos dobrac, jeszcze patrzę.. na stacku moze beda dodatkowe sugestie
  • Odpowiedz
@Pmpa: poza tym jeszcze to, ze w opencv nie mam thumbnail, ktora okazala sie bardzo przydatna – po ujednoliceniu wymiarow wzorcow z wieksza skutecznoscia zlapal
  • Odpowiedz