Techniki przetwarzania video
Transkrypt
Techniki przetwarzania video
Techniki przetwarzania video OpenCV - podstawy Agnieszka Lisowska Literatura Laganiere R., OpenCV 2 Computer Vision Application Programming Cookbook, Packt Publishing, 2011. Baggio D.L., Mastering OpenCV with Practical Computer Vision Projects, Packt Publishing, 2012. Suarez O.D., OpenCV Essentials, Packt Publishing, 2014. OpenCV Documentation, http://docs.opencv.org/ Open CV (1) OpenCV to darmowa biblioteka funkcji do zaawansowanego przetwarzania obrazów i video Dostępna pod adresem http://opencv.org Wspiera platformy: Windows, Linux, Android, iOS, Mac OS Przeznaczona do programowania w językach: C++, Java i Python Wersja OpenCV 2.x bazuje na języku C++ Wersja OpenCV 1.x bazuje na języku C OpenCV (2) Moduły: core – podstawowe funkcje i struktury danych imgproc – algorytmy przetwarzania obrazów video – algorytmy przetwarzania video calib3d – algorytmy video 3D features2d – detekcja cech i deskryptorów objdetect – detekcja obiektów highgui – interfejs przechwytywania video gpu – akceleracja GPU inne … Wstęp Możliwe środowiska programistyczne dla biblioteki openCV w ramach przedmiotu C++ Microsoft Visual Studio, Qt Java Eclipse Processing OpenCV w Processingu Aby wykorzystywać Processing do przetwarzania video konieczne jest użycie biblioteki Video https://www.processing.org/reference/libraries/video/ OpenCV dla Processingu https://github.com/atduskgreg/opencv-processing C++ - wczytanie obrazu (1) #include <opencv2/core/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <string> using namespace cv; using namespace std; int main( int argc, char** argv ) { string imageName(„obrazekTestowy.jpg"); // domyslny obraz Mat image; //deklaracja obrazu C++ - wczytanie obrazu (2) image = imread(imageName.c_str(), IMREAD_COLOR); // wczytanie obrazu if( image.empty() ) // zabezpieczenie przed niepoprawnym //otwarciem { cout << „Blad otwarcia obrazu" << endl; return -1; } namedWindow( „Moj obrazek", WINDOW_AUTOSIZE); // tworzy puste okno imshow( „Moj obrazek", image ); // pokazuje okno waitKey(0); // oczekuje na nacisniecie klawisza return 0; } http://docs.opencv.org/doc/tutorials/introduction/display_image/display_image.html#display-image C++ - wyświetlenie video (1) #include <opencv2/core/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std; int main(){ VideoCapture film(„mojFilm.avi”); //deklaracja obiektu if (!film.isOpened()) { cout << „Blad otwarcia filmu" << std::endl; return 1; } double rate = capture.get(CV_CAP_PROP_FPS); //czestotliwosc C++ - wyświetlenie video (2) bool stop(false); //do zatrzymania filmu Mat klatkaFilmu; namedWindow(„Moj film ", WINDOW_AUTOSIZE); int opoznienie=1000/rate; //liczba klatek na sekunde while (!stop) { if (!film.read(klatkaFilmu)) break; imshow(„Moj film”, klatkaFilmu); if (waitKey(opoznienie)>=0) stop=true; } film.release(); //zwolnienie pamieci return 0; } C++ - dalsze przykłady Przetwarzanie obrazu http://docs.opencv.org/doc/tutorials/imgproc/table_of_c ontent_imgproc/table_of_content_imgproc.html#tabl e-of-content-imgproc Processing – wczytanie obrazu import gab.opencv.*; OpenCV opencv; PImage src; void setup() { src = loadImage(„obrazekTestowy.jpg"); size(src.width, src.height); opencv = new OpenCV(this, src); //opakowanie obrazu } void draw(){ image(opencv.getOutput(), 0, 0); } Processing – wyświetlenie video import processing.video.*; Movie video; //deklaracja filmu void setup() { size(720,480); video = new Movie(this, „film.mov"); //wczytanie filmu [video.loop();] //zapetlenie video.play(); //wlaczenie filmu } void draw(){ image(video, 0, 0); //wyswietlenie filmu } void movieEvent(Movie m) { m.read(); } //oczekuje na nacisniecie klawisza Processing – dalsze przykłady Przetwarzanie obrazu https://github.com/atduskgreg/opencv-processing Uwaga: W Processingu dostępna jest pełna funkcjonalność biblioteki OpenCV. Przykład 1 - progowanie Przykład progowania ogólny opis i kod w C++ http://docs.opencv.org/doc/tutorials/imgproc/threshold/threshold.ht ml kod w Processingu https://github.com/atduskgreg/opencvprocessing/blob/master/examples/FilterImages/FilterImages.pde Przykład 2 – wykrywanie krawędzi Przykład wykrywania krawędzi metodą Canny’ego ogólny opis i kod w C++ http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detec tor/canny_detector.html kod w Processingu https://github.com/atduskgreg/opencvprocessing/blob/master/examples/FindEdges/FindEdges.pde Przykład 3 – transformata Hougha Przykład wykrywania krawędzi za pomocą transformaty Hougha ogólny opis i kod w C++ http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/ hough_lines.html kod w Processingu https://github.com/atduskgreg/opencvprocessing/blob/master/examples/HoughLineDetection/HoughLi neDetection.pde Przykład 4 – operacje morfologiczne Przykład erozji i dylatacji ogólny opis i kod w C++ http://docs.opencv.org/doc/tutorials/imgproc/erosion_dilatation/ero sion_dilatation.html kod w Processingu https://github.com/atduskgreg/opencvprocessing/blob/master/examples/DilationAndErosion/DilationA ndErosion.pde