Wykład po opencv intro


Wprowadzenie do OpenCV
Wprowadzenie do OpenCV
Przetwarzanie obrazów 2007/2008
Hubert Nowak, na podstwie  Image Processing in Practise: OpenCV , by Adam Kozłowski
Plan
" Co to jest OpenCV
" Instalacja i środowisko programowania
" Co jest w bibliotece OpenCV
" OpenCV w akcji ...
 ...
1
Co to jest biblioteka OpenCV
Dokładniej Intel Open Computer Vision library  biblioteka
funkcji w języku C++.
Stworzona aby ułatwić i przyspieszyć tworzenie aplikacji z tzw.
Computer Vision działających w czasie rzeczywistym.
Dostępna dla systemów Windows i Linux, Solaris,....
Instalacja i kody zródłowe:
http://sourceforge.net/projects/opencvlibrary
Dokumentacja, przykłady i szablony projektów dla
Visual C++ i innych środowisk:
http://opencvlibrary.sourceforge.net
Instalacja i środowisko programowania
Ostania finalna wersja nosi numer 1.0. W pełni wspiera środowisko,
Microsoft Visual C++ 6 i .NET.
Do bezproblemowej pracy w środowisku Borland C++ Builder 6,
lepszym rozwiązaniem jest wersja Beta5.
OpenCV stworzono w C++ dlatego może być z powodzeniem
stosowany w innych darmowych środowiskach dla tego języka.
2
Co jest w bibliotece  cxcore (.lib, .h, .dll)
Podstawowe typy używane w openCV:
CvPoint(punkt 2D), CvPoint3D32f(punkt 3D), CvMat (macierz), IplImage (obraz), ...
Inicjowanie, zarządzanie zmiennymi, typów zdefiniowanych w openCV:
cvCreateImage(), cvCreateMat(), cvGet(), cvReleaseImage(),...
Funkcje matematyczne (i inne) :
cvRound(), cvCartToPolar(), cvPow(), cvLog(), cvDFT(), cvDCT(), ...
Rysowanie:
cvLine (), cvRectangle(), cvEllipse(), ...
Operacje plikowe, obsługa błędów, wyjątków itp:
cvWriteInt(), cvWriteString(), cvReadInt(),...
Co jest w bibliotece  cv (.lib, .h, .dll)
cv
Funkcje przetwarzania i analizy obrazów. Większość działa na dwuwymiarowych
tablicach pikseli (nie koniecznie zmienne typu IplImage):
Gradienty, krawędzie, narożniki  cvSobel(), cvCornerHarris(),...
Operacje morfologiczne  cvErode(), cvDilate(), cvMorphologyEx(),...
Filtracja, transformacje kolorów  cvSmoth(), cvFilter2D(), cvCvtColor(),...
Kontury  cvFindContours(), ...
Analiza strukturalna obiektów:
Przetwarzanie konturów  cvApproxChains(), cvBoundingRect(),...
Analiza ruchu:
Optical flow, śledzenie obiektów  cvRunningAvg(), cvCamShift(),...
Rozpoznawanie obiektów:
Detekcja obiektów  cvHaarClassifier(), cvHaarDetectObject(),...
3
Co jest w bibliotece  cvaux (.lib, .h, .dll)
Funkcje specjalne (eksperymentalne):
Analiza sceny 3D,
Analiza obrazów stereowizyjnych,
Analiza PCA
Niejawne modele markowa (HMM)
Co jest w bibliotece  highgui (.lib, .h, .dll)
Interfejs graficzny, tworzenie i konfiguracja okien, wyświetlanie obrazów, obsługa
myszy i klawiatury:
cvNamedWindow(), cvResizeWindow(), cvShowImage(), cvWaitKey(),...
Wczytywanie i zapisywanie obrazów:
cvLoadImage(), cvSaveImage().
Obsługa wideo z pliku oraz z kamery:
cvCapture(), cvCaptureFromFile(), cvCaptureFromCAM(), cvGrabFrame(),...
Funkcje systemowe:
cvInitSystem(), cvConvertImage(),...
4
najprostszy program  wyświetlamy obraz
#include
#include
#include
#include
#include
int main(int argc, char* argv[])
{
IplImage *img= cvLoadImage("lena.bmp",0); //wczytuję obraz
cvNamedWindow("Image", 0); // tworzę okno
cvShowImage("Image",img); // wyświetlam obraz w oknie
cvWaitKey(0); // czekam na wcisniecie klawisza
return 0;
}
wyświetlamy obraz - szczegóły
IplImage *img= cvLoadImage("lena.bmp",0);
IplImage* cvLoadImage(
const char* filename, // nazwa pliku z obrazem do wczytania
int flags=CV_LOAD_IMAGE_COLOR ); // sposób interpretacji kolorów
cvNamedWindow("Image", 0);
int cvNamedWindow(
const char* name, //nazwa okna
int flags=CV_WINDOW_AUTOSIZE ); // automatyczne ustalanie rozmiaru okna
cvShowImage("Image",img);
void cvShowImage(
const char* name, // nazwa okna w którym ma być wyświetlony obraz
const CvArr* image ); // zmienna w której przechowywany jest obraz
5
skalowanie
int main(int argc, char* argv[])
{
IplImage *img= cvLoadImage("lena.bmp",0);//wczytuję obraz
// tworzy pusty obraz o zadanych wymiarach i typie
IplImage *bigimg=cvCreateImage(cvSize(512,512),IPL_DEPTH_8U,1);
cvZero(bigimg); // zerowanie tablicy pikseli
cvResize(img,bigimg,CV_INTER_CUBIC); // skalowanie
cvNamedWindow("Image_big", 0); // tworzę okno
cvShowImage("Image_big",bigimg); // wyświetlam obraz w oknie
cvWaitKey(0); // czekam na wcisniecie klawisza
cvReleaseImage(&img); // zwalniam pamięć obrazu
cvReleaseImage(&bigimg);
return 0;
}
Skalowanie  szczegóły (tworzenie nowego obrazu)
IplImage *bigimg=cvCreateImage(cvSize(512,512),IPL_DEPTH_8U,1);
IplImage* cvCreateImage(
CvSize size, // rozmiary obrazu
int depth, // liczba bitów do kodowania koloru
int channels ); // liczba kanałów barw (1  4)
Możliwe sposoby kodowania koloru:
IPL_DEPTH_8U - unsigned 8-bit integers
IPL_DEPTH_8S - signed 8-bit integers
IPL_DEPTH_16U - unsigned 16-bit integers
IPL_DEPTH_16S - signed 16-bit integers
IPL_DEPTH_32S - signed 32-bit integers
IPL_DEPTH_32F - single precision floating-point numbers
IPL_DEPTH_64F - double precision floating-point numbers
... cvSize(512,512)...
typedef struct CvSize {
int width; /* szerokość prostokąta */
int height; /* wysokość prostokąta */
} CvSize;
6
Skalowanie - szczegóły
cvZero(bigimg);
void cvSetZero( CvArr* arr ); // argument  wskaznik do zerowanej tablicy
#define cvZero cvSetZero
cvResize(img,bigimg,CV_INTER_CUBIC);
void cvResize(
const CvArr* src, // obraz zródłowy
CvArr* dst, // obraz docelowy
int interpolation=CV_INTER_LINEAR ); // metoda interpolacji
Metody interpolacji:
CV_INTER_NN - najbliższego sąsiedztwa,
CV_INTER_LINEAR  dwuliniowa (domyślna)
CV_INTER_AREA  interpolacja na podstawie sąsiednich bloków pikseli.
CV_INTER_CUBIC - sześcienna.
cvReleaseImage(&img);
cvReleaseImage(&bigimg);
void cvReleaseImage(
IplImage** image ); // wskaznik do obrazu który ma być usunięty z pamięci
Progowanie
int main(int argc, char* argv[])
{
IplImage *img= cvLoadImage("lena.bmp",0);//wczytuję obraz
// tworzy pusty obraz o zadanych wymiarach i typie
IplImage *im_thres = cvCreateImage(
cvSize(img->width, img->height),IPL_DEPTH_8U,1);
cvZero(im_thres);
cvThreshold(img,im_thres, 128, 255, CV_THRESH_BINARY);
cvNamedWindow("Thresholded image", 1);
cvShowImage("Thresholded image", im_thres);
cvReleaseImage(&img); // zwalniam pamięć obrazu
cvReleaseImage(&im_thres);
return 0;
}
7
Progowanie - szczegóły
IplImage *im_thres = cvCreateImage(
cvSize(img->width, img->height),IPL_DEPTH_8U,1);
typedef struct _IplImage {
int nSize; // rozmiar w bajtach (sizeof(IplImage)
int ID; // wersja
int nChannels; // liczba kanałów barw
int depth; // głębia kolorów  liczba bitów na piksel
int width; // szerokość obrazu
int height; // wysokość obrazu
...
} IplImage;
cvThreshold(img,im_thres, 128, 255, CV_THRESH_BINARY);
void cvThreshold(
const CvArr* src, // zródłowy
CvArr* dst, // docelowy
double threshold, // próg
double max_value, // maksimum
int threshold_type ); // rodzaj progowania
Transformacja poziomów (liniowa)
y
Np.Rozciąganie histogramu,
czy jakakolwiek liniowa
transformacja poziomów
jasności jest w rzeczywistości
przekształceniem
y = a * x + b
x
8
b
+
x
*
a
=
y
Transformacja poziomów (liniowa)
...
IplImage *im_scal = cvCreateImage(...);
...
cvConvertScaleAbs(img, im_scal, 5, 0);
cvConvertScaleAbs(img, im_scal, 0.5, 0);
cvConvertScaleAbs(img, im_scal, 1, 128);
cvConvertScaleAbs(img, im_scal, -1, 255);
cvNamedWindow("Scaled image", 1);
cvShowImage("Scaled image", im_scal);
...
Filtracja 1
cvSmooth(img,im_filter,CV_BLUR,5,5,0);
cvSmooth(img,im_filter,CV_MEDIAN,7,7,0);
void cvSmooth(
const CvArr* src, //obraz zródłowy
CvArr* dst, // obraz docelowy
int smoothtype=CV_GAUSSIAN, // typ filtracji
int param1=3, int param2=0,
double param3=0, double param4=0 );
Typy filtracji:
CV_BLUR
CV_BLUR_NO_SCALE
CV_GAUSSIAN
CV_MEDIAN
CV_BILATERAL
9
Filtracja 2
//tworzę maskę filtru uśredniającego 3x3
CvMat* filtr = cvCreateMat(3,3,CV_32FC1); //macierz 3x3
// ustawiam elemenety macierzy/maski filtru
cvSet2D(filtr,0,0,cvRealScalar(0.11)); // (0,0) = 1/9
cvSet2D(filtr,0,1,cvRealScalar(0.11)); // (0,1) = j.w.
cvSet2D(filtr,0,2,cvRealScalar(0.11)); // ...
cvSet2D(filtr,1,0,cvRealScalar(0.11));
cvSet2D(filtr,1,1,cvRealScalar(0.11));
cvSet2D(filtr,1,2,cvRealScalar(0.11));
cvSet2D(filtr,2,0,cvRealScalar(0.11));
cvSet2D(filtr,2,1,cvRealScalar(0.11));
cvSet2D(filtr,2,2,cvRealScalar(0.11));
// filtracja poprzez splot maski z obrazem
cvFilter2D(img, im_filter, filtr, cvPoint(-1,-1));
Kolory
// wczytuje z pliku i wyświetlam obraz kolorowy
IplImage *imgc = cvLoadImage("lakeview.bmp",1);
cvNamedWindow("kolory",1);cvShowImage("kolory",imgc);
// obrazy dla składowych kolorów BGR
IplImage *kanal1=cvCreateImage(cvSize(256,256),IPL_DEPTH_8U,1);
IplImage *kanal2=cvCreateImage(cvSize(256,256),IPL_DEPTH_8U,1);
IplImage *kanal3=cvCreateImage(cvSize(256,256),IPL_DEPTH_8U,1);
cvZero(kanal1);cvZero(kanal2);cvZero(kanal3); // zerowanie
// rozdzielam składowe kolorów do osobnych obrazów
cvCvtPixToPlane(imgc,kanal1,kanal2,kanal3,0);
// tworzę okna i wyświetlam obrazy składowych BGR
cvNamedWindow("Kanal1",1);
cvNamedWindow("Kanal2",1);
cvNamedWindow("Kanal3",1);
cvShowImage("Kanal1",kanal1);
cvShowImage("Kanal2",kanal2);
cvShowImage("Kanal3",kanal3);
10
Kolory (efekt działania kodu)
Kolory  konwersja
// wczytuje z pliku i wyświetlam obraz kolorowy
IplImage *imgc = cvLoadImage("lakeview.bmp",1);
IplImage *img2 = cvCloneImage(imgc); //tworzę kopię obrazu org.
//konwersja do YCrCb
cvCvtColor(imgc,img2,CV_RGB2YCrCb);
// obrazy dla składowych kolorów Y Cr Cb
IplImage *kanal1=cvCreateImage(cvSize(256,256),IPL_DEPTH_8U,1);
...
// rozdzielam składowe kolorów do osobnych obrazów
cvCvtPixToPlane(imgc,kanal1,kanal2,kanal3,0);
...
Możliwe konwersje:
RGB<=>CIE XYZ , RGB<=>YCrCb, RGB<=>HSV, RGB<=>HLS
RGB<=>CIE L*a*b*, RGB<=>CIE L*u*v*
11
Kolory  konwersja (efekt działania kodu)
12


Wyszukiwarka

Podobne podstrony:
mat wykład 2 po 2 szt na str
mat wykład 3 po 2 szt na str
wykład HLP po roku 1918 dr Wielopolski
wyklad 12 09 po 6 slajdow
Strategia bezpieczeństwa i obronności rzeczypospolitej polskiej po wstąpieniu do nato wykład
Manipulacja edukacją – wykład oraz wnioski po wykładzie
wyklad0 10 09 po 6 slajdow
wyklad 01 10 po 6 slajdow
Wykład 11 Recovery – Transakcyjne odtwarzanie bazy danych po awarii
Wyklad II wyciagniecie po profilach
E Maniewska, Prowspólnotowa wykładnia prawa po akcesjii, eps 059
wyklad 6 11 09 po 6 slajdow
Rozwój po adolescencji Wykłady 2009
Rozwój po adolescencji Wykłady 2009
wyklad 4 12 09 po 6 slajdow
Wyklad II bryly obrotowe wyciagniecie po sciezce
Sieci komputerowe wyklady dr Furtak

więcej podobnych podstron