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