Skocz do zawartości
Elektryk0

[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

Udostępnij ten post


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.

Udostępnij ten post


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

Udostępnij ten post


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ą.

Udostępnij ten post


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 🙂

Udostępnij ten post


Link to post
Share on other sites

Cześć jak wygląda implementacja tej biblioteki na uk ? np cortex - m3 z zestawu zl27ARM ?Jak uk będzie sobie radził ?

Udostępnij ten post


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.

Udostępnij ten post


Link to post
Share on other sites

Czy ktoś ma jeszcze problemy z implementacją biblioteki? Nie mam pojęcia jak to ugryźć.

Udostępnij ten post


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ć?

Udostępnij ten post


Link to post
Share on other sites

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...