OpenCV – #1 – Pierwsze kroki

OpenCV – #1 – Pierwsze kroki

W dzisiejszych czasach, gdy możliwości układów cyfrowych stale rosną, zaimplementowanie systemu wizyjnego w robocie mobilnym nie jest już rzeczą nieosiągalną.

Biblioteka OpenCV, którą tutaj prezentuje zawiera szereg funkcji, które zadanie to czynią jeszcze prostszym, warto więc się z nią zaznajomić.

Następny artykuł z serii »

Artykuł ten stanowi wprowadzenie do OpenCV, będzie on pomocny szczególnie tym, którzy nigdy wcześniej nie mieli z nią do czynienia. Postaram się tu bezboleśnie przeprowadzić czytelnika przez proces instalacji i tworzenia prostego programu wyświetlającego w oknie obraz wczytany z pliku.

Pracować będziemy w środowisku Eclipse, program napiszmy w języku C++. Artykuł ten opiera się o bibliotekę OpenCV w wersji 2.4.2, wszystkie programy w nim przedstawione będą napisane w OpenCV C++ API.

Instalacja OpenCV 2.4

Proces instalacji należy przeprowadzić w systemie Windows 32-bit. Zakładam, że jest już zainstalowany na komputerze pakiet MinGW oraz Eclipse dla C/C++, jeżeli nie, to należy je zainstalować przed przystąpieniem do wykonywania poniższych kroków.

1. Z odpowiedniej strony  pobieramy najnowszą wersję OpenCV, na chwile obecną 2.4.2.

2. Po pobraniu wypakowujemy plik np. do C:\OpenCV2.4.

3. Z racji, że chcemy używać OpenCV z kompilatorem GNU musimy skompilować bibliotekę na naszej platformie przy użyciu tegoż kompilatora, aby otrzymać niezbędne pliki binarne. Aby tego dokonać pobieramy i instalujemy CMake w najnowszej wersji.

4. Odpalamy Cmake, najprościej uruchomić CMake-GUI jest to nakładka graficzna. Wskazujemy folder do którego rozpakowaliśmy OpenCV i w którym znajduje się plik CmakeLists.txt.

W polu poniżej wskazujemy gdzie mają trafić wygenerowane przez CMake pliki np.:

C:/OpenCV2.4/opencv/release

Klikamy w przycisk "Configure", jako generator wybieramy MinGW - make. Może wyskoczyć jakiś błąd, zatwierdzamy i klikamy jeszcze raz "Configure". Zostanie utworzona odpowiednia konfiguracja co może chwilę potrwać na koniec powinniśmy otrzymać komunikat "Configuring done".

CMake-GUI

CMake-GUI

5. Następnie przyciskiem "Generate" tworzymy pliki binarne potrzebne do kompilacji OpenCV na naszym komputerze na koniec powinien pojawić się napis "Generating done".

Poprawnie zakończony proces generowania.

Poprawnie zakończony proces generowania.

6. Otwieramy konsolę i przechodzimy z jej poziomu do wygenerowanego folderu release. Musimy teraz dokonać kompilacji biblioteki. Będąc w folderze release wykonujemy z poziomu konsoli mingw32-make.

Konsola

Konsola

7. W głównym folderze z biblioteką, u mnie C:\OpenCV2.4\opencv, odnajdujemy folder build.

Zawartość folderu.

Zawartość folderu.

Otwieramy go i odszukujemy folder include. Znajdują się w nim pliki nagłówkowe naszej biblioteki. Najprościej jest skopiować zawartość folderu include do folderu include pakietu MinGW. Jeżeli nie chcemy tego robić, można dać znać eclipse, aby szukał w tym folderze plików nagłówkowych, jednak będziemy to musieli robić za każdym razem, gdy tworzymy nowy projekt.

Należy wówczas z górnego panelu Eclipse przejść do

Project->Properties->C/C++ Build->Settings->GCC C++ Compiler->Includes

Następnie w polu Include paths dodać link do plików nagłówkowych, u mnie:

C:\OpenCV2.4\opencv\build\include

8. W folderze build odnajdujemy również \x86\mingw\lib następnie można albo skopiować zawartość lib do tegoż samego folderu MinGW albo podobnie jak przedtem poinformować Eclipse o nowych miejscach do szukania bibliotek, czyli:

Project->Properties->C/C++ Build->Settings->MinGW C++ Linker->Libreries

W polu Library search path link do folderu.

9. Na koniec należy odnaleźć w folderze build - \x86\mingw\bin i skopiować znajdujące się tam pliki .dll do folderu Windows/system32.

Pierwszy projekt OpenCV w Eclipse

Zaczynamy od: File->New->C++ Project

Nowy projekt

Nowy projekt

Jako kompilator wybieramy MinGW, typ projektu – pusty. Finish.

Zawartość katalogu

Zawartość katalogu

Następnie klikamy w okienku po lewej stronie na folder OpenCV_1 prawym i dodajemy folder źródłowy New->Source Folder.

Nowy folder źródłowy

Nowy folder źródłowy

W kolejnym oknie wpisujemy nazwę folderu źródłowego, np. src

Nazwa folderu źródłowego

Nazwa folderu źródłowego

W lewym okienku zostanie utworzony folder src, klikamy na niego i dodajemy plik źródłowy.

Nowy plik źródłowy

Nowy plik źródłowy

W kolejnym oknie wpisujemy nazwę plik np. main.cpp i kończymy. Należy jeszcze dołączyć odpowiednie dyrektywy dla linkera, aby używał bibliotek OpenCV przy linkowaniu naszego programu. Klikamy w lewym oknie na folder OpenCV_1 i przechodzimy do:

Project->Properties->C/C++ Build->Settings->MinGW C++ Linker->Libraries

Dodajemy dyrektywy linkera

Dodajemy dyrektywy linkera

W polu Libraries należy wpisać:

Uzupełnione biblioteki:

Uzupełnione biblioteki

Uzupełnione biblioteki

Spowoduje to "dolinkowanie" wszystkich bibliotek OpenCV do naszego programu. W większości przypadków nie jest to potrzebne, gdyż nie wykorzystujemy ich wszystkich, a jedynie kilka z nich. To, które biblioteki są nam potrzebne w danej chwili można wydedukować choćby na podstawie nazw dołączonych plików include.

Tutaj jednak zostają podane wszystkie co by łato je można było znaleźć w razie potrzeby, a każdy z nas już sam zdecyduje, które z nich mu w danej chili będą przydatne.

Pierwszy program

Następnie wpisujemy kod naszego programu.

Zapisujemy Ctrl+S i wykonujemy Project->Build Project, a następnie Run aby odpalić nasz program. Obrazek należy umieścić w w folderze głównym z naszym programem.

Umiejscowienie przykładowego pliku

Umiejscowienie przykładowego pliku

Przeanalizujmy program. Na początku dołączamy pliki nagłówkowe OpenCV:

Korzystamy także z przestrzeni nazw OpenCV:

W dalszych krokach tworzymy zmienną przechowującą obrazek i wczytujemy do niej dane z pliku:

Jak wynika z powyższego w OpenCV obrazy przechowujemy w klasach Mat, które mają budowę wzorowaną na macierzach. W klasach tych można przechowywać także macierze a OpenCV udostępnia szereg funkcji pozwalających na wykonywanie działań na nich.

Następnie tworzymy okno, jako nazwę podajemy łańcuch umieszczony w zmiennej window_name. Za pomocą drugiego parametru ustawiamy automatyczne dopasowanie rozmiarów okna do jego zawartości.

Na koniec wyświetlamy obrazek funkcją imshow. Podajemy nazwę okna, w którym zostanie wyświetlony obrazek, oraz klasę Mat w której go przechowujemy.

Ostatnia funkcja czeka na wciśnięcie klawisza, jako argument przyjmuję czas opóźnienia w ms.

Podsumowanie

Gdyby podczas studiowania artykułu pojawiły się jakieś problemy proszę zadawać pytania, postaram się szybko odpowiedzieć a w miarę możliwości zmienić niezrozumiałe fragmenty tekstu jeśli takowe się znajdą.

Dokumentacja OpenCV 2.4.2: http://opencv.itseez.com/index.html

Następny artykuł z serii »

C, obraz, OpenCV, rozpoznawanie, wizyjne

Trwa ładowanie komentarzy...