Skocz do zawartości

[Programowanie] OpenCV - Wykrywanie obiektów


Pomocna odpowiedź

W tej części zajmiemy się zagadnieniem wykrywania obiektów. Biblioteka OpenCV oferuje szereg narzędzi, które ułatwią nam to zadanie. Program będzie pobierał klatki z kamery internetowej, następnie będzie na bieżąco przetwarzał obraz, oraz zwracał współrzędne środka prostokąta otaczającego największy obiekt o ustalonym przez nas kolorze.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

camera.thumb.png.75ef9267cac784c6bad1977e6b422799.png

  • Lubię! 1
Link to post
Share on other sites
Żeby zrozumieć sprawę jeszcze lepiej popatrzmy jak wygląda poniższy obrazek w wersji hsv.

IMG_5068af6009ff73980.png

Hmm, tutaj jest coś nie tak. Przy zmianie sposobu reprezentacji koloru obraz generalnie się nie zmienia (bądź zmiany są minimalne). U Ciebie nie zmienił się tylko sposób reprezentacji ale doszedł jakiś nieznany filtr.
Link to post
Share on other sites
generalnie się nie zmienia (bądź zmiany są minimalne)

Przy zamianie RGB->CMYK są niewielkie zmiany, bo to podobne układy (monitory pracują na RGB). Jednakże takie HSV jest inaczej definiowane i chyba stąd ta różnica.

"An RGB image on the left and the converted HSV image on the right."

Źródło: http://opticks.org/confluence/display/opticksExt/COAN+General+Image+Processing

Link to post
Share on other sites

Wszystko jest jak najbardziej OK. Funkcja konwertująca działa dobrze. Natomiast jeśli chodzi o to, że obrazki się różnią, no cóż na szybko mogę wysnuć wniosek, że skoro klasa Mat nie przechowuje w swoim wnętrzu informacji o modelu barw, w którym jest reprezentowany dany obrazek co wynika dokumentacji

http://www710.univ-lyon1.fr/~eguillou/documentation/opencv2/classcv_1_1_mat.html

to po prostu informacje takie nie są dostępne w funkcji imshow, gdyż ich przecież do niej w żaden niezależny sposób nie przekazujemy, a więc funkcja po prostu wyświetla obrazek tak jakby był w standardowym modelu barw. Oczywiście mogę się mylić, gdyż są to tylko moje przypuszczenia. Nie mam jednak najmniejszych wątpliwości co do tego, że konwersja działa poprawnie, gdyż jest realizowana w całości przez funkcję biblioteczną.

Link to post
Share on other sites

Generalnie gdyby przy zmianie modelu następowała zmiana barw, to nie miało by to większego sensu. Dany kolor można przedstawić za pomocą różnych wartości w zależności od modelu. Najpopularniejsze modele, to:

* bazujące na kolorach składowych, między innymi: RGB, CMY, CMYK

* bazujące na parametrach koloru, między innymi: HSV, HSL, Lab

Niektóre kolory mogą istnieć tylko w niektórych modelach i są poza możliwym zakresem w innych, jednakże za pomocą prostych wzorów i w obsługiwanym zakresie można się płynnie przemieszczać między reprezentacją tego samego koloru.

Dlatego zaprezentowana tutaj zmiana musi tyczyć się czegoś innego. Możliwe, że jest to rzutowanie HSV na RGB (BGR) bez przeliczania. Tylko czy takie rzutowanie ma jakiś sens to już temat do głębszej dysputy. Jeśli zakładamy, że R=H, G=S i B=V to zwyczajnie wizualizujemy kolorem czerwonym odcień, zielonym nasycenie, a niebieskim jasność. No może ma to sens.

Ostatnio dowiedziałem się, że rzutwanie float na int i z powrotem też ma sens, co generalnie mocno mnie zaskoczyło.

No nic, tak chciałem zasygnalizować, że coś mi tu nie pasuje 🙂

Link to post
Share on other sites

Cześć, mam kłopot z programem po skompilowaniu program się wyłącza z błędem: The program '[7736] openCV_test.exe' has exited with code -1073740777 (0xc0000417). Co ciekawe gdy zakryję kamerkę palcem (czarny ekran) program działa.

Link to post
Share on other sites

Gdy odpalam program do wykrywania kolorowych obiektów, to wyskakuje mi taki błąd:

Debug Assertion Failed!

 

Program: C:\Windows\system32\MSVCP110D.dll

File: c:\...\vc\include\vector

Line: 1140

 

Expression: vector subscript out of range

Jednak, gdy zamienię waitKey(20) na np. waitKey(1000) to wtedy wszystko działa. Co więcej, zauważyłem, że błąd pojawia się gdy używam funkcji inRange.

Natomiast w ostatnim programie po odpaleniu wyskakuje taki błąd:

Unhandled exception at 0x0FB7FD8A (opencv_imgproc249d.dll) in ConsoleApplication3.exe: 0xC0000005: Access violation reading location 0xCDCDCDCD.

Ktoś wie jak można to naprawić?

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.