1 Temat: Wprowadzenie do biblioteki OpenCV

Podobne dokumenty
Krótki wstęp do biblioteki OpenCV. Jak wykorzystać kamerkę internetową do przetwarzania obrazów.

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Allegro5 3/x. Przykład wklejamy go do dev'a zamiast kodu domyślnego dal programu z allegro i kompilujemy.

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

Podstawy programowania skrót z wykładów:

Grafika rastrowa (bitmapa)-

Algorytmy przetwarzania obrazów

Formaty plików graficznych - wprowadzenie

Rysowanie punktów na powierzchni graficznej

Allegro5 część 1 - Witaj Świecie! Projekt, inicjalizacja, tworzenie okna, czcionki. Autor: Kamil Krzyszczuk - C mons

Wyższa Szkoła Informatyki Stosowanej i Zarządzania

Metody przetwarzania obrazów z wykorzystaniem biblioteki OpenCV

Lab 9 Podstawy Programowania

2 Przygotował: mgr inż. Maciej Lasota

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Programowanie obiektowe

Odczytywanie i zapisywanie obrazów rastrowych do plików, operacje punktowe na tablicach obrazów

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji

1.3. Tworzenie obiektów 3D. Rysunek 1.2. Dostępne opcje podręcznego menu dla zaznaczonego obiektu

Praktyka programowania projekt

Podstawy programowania w języku C++

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Plan wykładu. Wprowadzenie Program graficzny GIMP Edycja i retusz zdjęć Podsumowanie. informatyka +

Materiały dla studentów pierwszego semestru studiów podyplomowych Grafika komputerowa i techniki multimedialne rok akademicki 2011/2012 semestr zimowy

GIMP Grafika rastrowa (Ćwiczenia cz. 2)

DYNAMICZNE PRZYDZIELANIE PAMIECI

Formaty plików graficznych

Pokaz slajdów na stronie internetowej

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Grafika komputerowa. Zajęcia 8

JSLib 4.1 Dokumentacja

Podstawy grafiki komputerowej. Teoria obrazu.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Zaawansowany kurs języka Python

zna wybrane modele kolorów i metody transformacji między nimi zna podstawowe techniki filtracji liniowej, nieliniowej dla obrazów cyfrowych

Szybkie tworzenie grafiki w GcIde

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

WSTAWIANIE GRAFIKI DO DOKUMENTU TEKSTOWEGO

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Detekcja twarzy w obrazie

Do obsługi plików BMP należy stworzyć klasę przechowującą zawartość obrazu i udostępniającą następujące metody:

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Podstawy grafiki komputerowej

Spis treści. Programowanie w ImageJ. Zadanie 1. Zadanie 2

Raport. Bartosz Paprzycki UMK 2009/2010

7. Dynamiczne generowanie grafiki

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Plan wykładu. Wprowadzenie Program graficzny GIMP Edycja i retusz zdjęć Podsumowanie. informatyka +

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Microsoft Small Basic

Język C zajęcia nr 11. Funkcje

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

Analiza strategii robotów mini-sumo na podstawie obserwacji ich ruchu

Szablony funkcji i klas (templates)

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Uwaga! Upadek! Opis zadania konkursowego

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Julia 4D - raytracing

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Informatyka II. Laboratorium Aplikacja okienkowa

Język C i C++. Podstawy. Zagadnienia do opanowania. Przykład 1. (modyfikuj kod, aby zrealizować punkty 5., 7.)

Pasek menu. Ustawienia drukowania

Akademia Górniczo - Hutnicza im. Stanisława Staszica w Krakowie. Projekt. z przedmiotu Analiza i Przetwarzanie Obrazów

imei CYFROWE PRZETWARZANIE SYGNAŁÓW Laboratorium Temat: Tworzenie aplikacji w środowisku LabWindows/CVI Instytut Metrologii, Elektroniki i Informatyki

Temat: Transformacje 3D

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

PyGame Gra w Ponga. Spis treści

INTERAKTYWNA KOMUNIKACJA WIZUALNA. Flash - podstawy

Przetwarzanie obrazów rastrowych macierzą konwolucji

GRAFIKA RASTROWA. WYKŁAD 1 Wprowadzenie do grafiki rastrowej. Jacek Wiślicki Katedra Informatyki Stosowanej

Programowanie w Javie

Co nie powinno być umieszczane w plikach nagłówkowych:

Grafika komputerowa. Dla DSI II

B Biblioteka GD. B.1 Koncepcja biblioteki GD.

Grafika komputerowa. Zajęcia 7

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Ćwiczenia z przetwarzania tablic 2D

Implementacja filtru Canny ego

Budowa i generowanie planszy

W niniejszym samouczku przedstawiono sposób tworzenia logo dla wymyślonej kawiarni. Tak będzie wyglądać ostateczny efekt pracy:

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Mikołaj Sklepek. Oprogramowanie do sterowania komputerem przy użyciu wskaźnika laserowego

Laboratorium Przetwarzania Sygnałów

Pobieranie argumentów wiersza polecenia

Projekt zaliczeniowy z Programowania

Technologie Map Cyfrowych

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Tutorial. HTML Rozdział: Ramki

Wprowadzenie do biblioteki klas C++

Pliki. Informacje ogólne. Obsługa plików w języku C

Obraz jako funkcja Przekształcenia geometryczne

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

WIZUALIZACJA INFORMACJI TEKSTOWEJ WSTĘP DO HTML 5 CANVAS

Transkrypt:

Instrukcja Zaawansowane przetwarzanie obrazów 1 Temat: Wprowadzenie do biblioteki OpenCV Przygotował: mgr inż. Tomasz Michno 1 Wstęp 1.1 OpenCV - krótki wstęp OpenCV (Open Source Computer Vision) jest otwartą biblioteką dla języka C/C++, służącą do przetwarzania obrazu (zwłaszcza wideo) w czasie rzeczywistym. Dostępna jest na większość systemów operacyjnych. Oprócz języka C (i C++), OpenCV pozwala na programowanie (za pomocą nakładek - wrapperów) w językach takich jak: C#, Python, Ruby i Java. Biblioteka umożliwia m.in.: obsługę popularnych plików graficznych, kamer oraz zapis obrazu i wideo do pliku rozpoznawanie obiektów wykonywanie standardowych operacji na obrazie (np. wykrywanie krawędzi, rozmycie itp.) wykonywanie przekształceń rozpoznawanie gestów śledzenie ruchu Oprócz wymienionych funkcji biblioteka posiada własny system tworzenia okien, w których wyświetlany jest obraz lub wideo. Dzięki temu programista może skupić się na właściwej części aplikacji, uzyskując wieloplatformowy kod. 1.2 OpenCV - Wczytywanie obrazów Plik: przyklad1.cpp 1 #i n c l u d e <opencv / cv. h> 2 #i n c l u d e <opencv / highgui. h> 3 4 i n t main ( ) { 5 cvnamedwindow( " Przyklad 1", CV_WINDOW_AUTOSIZE ) ; 1

6 IplImage image = cvloadimage ( " obrazek. jpg " ) ; 7 i f ( image==null) { 8 p e r r o r ( " Wystapil blad przy wczytywaniu obrazka obrazek. jpg! " ) ; 9 cvdestroywindow ( " Przyklad 1" ) ; 10 r eturn 1 ; 11 } 12 cvshowimage ( " Przyklad 1", image ) ; 13 cvwaitkey ( 0 ) ; 14 cvreleaseimage ( &image ) ; 15 cvdestroywindow ( " Przyklad 1" ) ; 16 return 0 ; 17 } Listing 1: Wczytywanie i wyświetlanie plików graficznych Listing znajdujący się powyżej (Listing 1) zawiera pełny kod programu, który wczytuje z pliku obraz oraz wyświetla go w oknie. Linijki 1 i 2 zawierają pliki nagłówkowe, które należy dołączyć do każdego programu. W linijce 5 tworzone jest nowe okno o nazwie Przyklad 1 za pomocą funkcji cvnamedwindow(): int cvnamedwindow(const char* name, int flags) name - nazwa okna flags - flagi (obecnie możliwa jest tylko flaga CV_WINDOW_AUTOSIZE) Linijka 6 odpowiada za utworzenie i wczytanie obrazka (przechowywany za pomocą wskaźnika typu IplImage), za pomocą funkcji cvloadimage: IplImage* cvloadimage( const char* filename, int iscolor=cv_load_image_color ) filename - ścieżka do pliku iscolor - informuje, jak wczytać kolory obrazka (możliwe opcje to: CV_LOAD_IMAGE_COLOR - obrazek kolorowy o 3 kanałach, CV_LOAD_IMAGE_GRAYSCALE - odcienie szarości, CV_LOAD_IMAGE_UNCHANGED - bez zmian - jak w pliku) W linijce 12 wyświetlany jest obraz w utworzonym oknie za pomocą funkcji cvshowimage o dwóch parametrach: nazwie okna i wskaźniku na zmienną typu IplImage. Funkcja cvwaitkey (jedynym parametrem jest czas przez jaki funkcja ma czekać na naciśnięcie klawisza; wartość <=0 oznacza nieskończoność) w linii 13 odpowiada za zatrzymanie programu, aż do naciśnięcia klawisza ESC. 2

Następnie przy wychodzeniu z programu (linie 10 i 11) należy zwolnić pamięć przydzieloną do obrazka (funkcja cvreleaseimage()) oraz usunąć utworzone okno (cvdestroywindow()). 1.3 OpenCV - Proste przekształcenia obrazów Plik: przyklad2.cpp Biblioteka OpenCV pozwala na dokonywanie przekształceń m.in. takich jak: rozmywanie, wyostrzanie, transformacje, wykrywanie krawędzi oraz rysowanie figur geometrycznych. Wszystkie operacje przedstawione są w OpenCV Wiki - http://opencv. willowgarage.com/documentation/c/imgproc image_processing.html. Na przykładzie zostanie pokazane jedynie rozmywanie i rozpoznawanie krawędzi. 1 IplImage image2 = cvcreateimage ( cvgetsize ( image ), image >depth, image >nchannels ) ; 2 i f ( image2==null) { p e r r o r ( "Blad przy tworzeniu obrazka " ) ; return 1 ; } 3 cvsmooth ( image, image2, CV_GAUSSIAN, 1 5, 5 ) ; 4 5 IplImage imagebw = cvcreateimage ( cvgetsize ( image2 ), IPL_DEPTH_8U, 1) ; 6 IplImage edgesimage = cvcreateimage ( cvgetsize ( image2 ), IPL_DEPTH_8U, 1) ; 7 i f (imagebw==null edgesimage==null) { p e r r o r ( "Blad przy tworzeniu obrazka " ) ; r e turn 1 ; } 8 9 cvcvtcolor ( image2, imagebw, CV_BGR2GRAY) ; 10 cvcanny ( imagebw, edgesimage, 0. 3, 0. 8 ) ; Listing 2: Przekształcenia graficzne Większość przekształceń graficznych w OpenCV wymaga, aby stworzyć kopię obrazka do którego zostanie zapisany wynik. W tym celu należy go utworzyć za pomocą funkcji cvcreateimage (linia nr 1, 5 i 6): IplImage* cvcreateimage(cvsize size, int depth, int channels); size - rozmiar obrazka depth - głębia bitowa obrazka channels - liczba kanałów na piksel 3

W linii 3 wykonywane jest rozmywanie obrazu za pomocą cvsmooth(): void cvsmooth( const CvArr* src, CvArr* dst, int smoothtype=cv_gaussian, int param1=3, int param2=0, double param3=0, double param4=0 ); src - obrazek źródłowy (na którym dokonywane jest rozmycie) dst - obrazek wynikowy smoothtype - rodzaj rozmywania (najczęściej CV_GAUSSIAN) param1 - param4 - kolejne parametry rozmycia Linie 5-10 odpowiadają za wykrycie krawędzi. Ponieważ funkcja wykrywająca krawędzie (cvcanny) wymaga, aby obrazki były w odcieniach szarości, dlatego należy utworzyć dwa obrazki w tej palecie (linie 5 i 6) oraz przekonwertować obrazek kolorowy image do obrazka w odcieniach szarości image2 (za pomocą cvcvtcolor, linia 8): cvcvtcolor ( const CvArr * src, CvArr * dst, int code ) src, dst - obrazek źródłowy i wynikowy code - sposób konwersji ( CV_BGR2GRAY - BGR na odcienie szarości, CV_BGR2RGB - BGR na RGB, CV_BGR2HSV - BGR na HSV ) Wykrycie krawędzi odbywa się w linii 9 za pomocą funkcji cvcanny(): void cvcanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 ); image, edges - obrazek źródłowy i wynikowy threshold1, threshold2, aperture_size - progi oraz parametr przesłony Pozostałe funkcje do przetwarzania obrazów: http://opencv.willowgarage. com/documentation/c/imgproc image_processing.html oraz rysowania obiektów geometrycznych: http://opencv.willowgarage.com/documentation/ c/core_drawing_functions.html. 1.4 Operacje na pikselach W celu odczytania wartości piksela w punkcie należy skorzystać z funkcji: CvScalar cvget2d( CvArr* image, int y, int x); 4

image - obrazek źródłowy y, x - współrzędne y i x punktu, z którego będzie pobierany piksel Typ CvScalar posiada jedynie pole o nazwie val, będące tablicą czteroelementową (gdzie kolejno są zapisane wartości r (indeks 0), g (indeks 1) i b (indeks 2) ). W celu ustawienia wartości piksela w punkcie należy skorzystać z funkcji: void cvset2d( CvArr* image, int y, int x, CvScalar point); image - obrazek źródłowy y, x - współrzędne y i x punktu, z którego będzie pobierany piksel point - zmienna typu CvScalar, zawiera informacje o kolorze piksela, który ma zostać wstawiony na obrazie we współrzędnych x,y 1.5 Dokumentacja biblioteki OpenCV Do biblioteki dostępna jest pełna dokumentacja techniczna. Można ją znaleźć pod adresem: http://opencv.willowgarage.com/documentation/c/ index.html. 2 Zadania 1. Stwórz nowy obraz w programie (bez wczytywania z pliku), a następnie narysuj na nim używając funkcji graficznych dowolny rysunek. Obrazek należy wyświetlić. 2. Wczytaj dowolny obrazek z dysku, a następnie go wyświetl. 3. Do wczytanego obrazka dodaj minimum 4 dowolne przekształcenia (np. wyostrzanie, inwersja kolorów itp.). 4. Dodaj do powyższego programu funkcję realizującą odbicie lustrzane (poziome lub pionowe - do wyboru) bloku pikseli z użyciem funkcji działających bezpośrednio na pikselach. 5