Aukasz Janik
grupa 24
17.03.2012
Systemy wizyjne - Sprawozdanie
Biblioteka OpenCV
laboratorium 3
Opis działania programu:
Program po uruchomieniu i wczytaniu odpowiednich bibliotek, łączy się z
filmem/kamerą podłączoną do komputera w celu przechwycenia obrazu i wyświetlenia
go w oknie. Obraz jest wyświetlany aż do momentu przerwania tego procesu przez
użytkownika. Obraz pokazywany jest w kilku oknach, w każdym przy zastosowaniu
innego filtra. Każdy filtr regulowany jest przy pomocy suwaka sterujemy poziom,
intensywność filtru.
Kod zródłowy wraz z komentarzami:
#include
#include
#include
#include
#include // wczytanie potrzebnych bibliotek
using namespace std;
CvCapture* capture =NULL; //stworzenie obiektu capture
int Erode_iter=1; //zmienne zmieniajace parametry filtrow
int Dilate_iter=1;
int Opening_iter=1;
int Closing_iter=1;
int Gradient_iter=1;
int Tophat_iter=1;
int Blackhat_iter=1;
IplImage* frame = 0; //wskazniki do obiektu IplImage
IplImage* Erode = 0;
IplImage* Dilate = 0;
IplImage* Opening = 0;
IplImage* Closing = 0;
IplImage* Gradient = 0;
IplImage* Tophat = 0;
IplImage* Blackhat = 0;
void erode_trackbar(int Erode_iter) //funkcje kierujace dzialaniem filtru
{
cvErode (frame,Erode,0,Erode_iter);
}
void dilate_trackbar(int Dilate_iter)
{
cvDilate (frame,Dilate,0,Dilate_iter);
}
void opening_trackbar(int Opening_iter)
{
IplImage* temp =0;
cvMorphologyEx (frame,Opening,temp,CV_SHAPE_RECT,CV_MOP_OPEN,Opening_iter);
}
void closing_trackbar(int Closing_iter)
{
IplImage* temp = 0;
cvMorphologyEx (frame,Closing,temp,CV_SHAPE_RECT,CV_MOP_CLOSE,Closing_iter);
}
void gradient_trackbar(int Gradient_iter)
{
IplImage* temp = 0;
cvMorphologyEx (frame,Gradient,temp,CV_SHAPE_RECT,CV_MOP_GRADIENT,Gradient_iter);
}
void tophat_trackbar(int Tophat_iter)
{
IplImage* temp = 0;
cvMorphologyEx (frame,Tophat,temp,CV_SHAPE_RECT,CV_MOP_TOPHAT,Tophat_iter);
}
void blackhat_trackbar(int Blackhat_iter)
{
IplImage* temp = 0;
cvMorphologyEx (frame,Blackhat,temp,CV_SHAPE_RECT,CV_MOP_BLACKHAT,Blackhat_iter);
}
void image_processing() //funkcja wywolujace funkcje odpowiedzialne za suwaki
{
erode_trackbar(Erode_iter);
dilate_trackbar(Dilate_iter);
opening_trackbar(Opening_iter);
closing_trackbar(Closing_iter);
gradient_trackbar(Gradient_iter);
tophat_trackbar(Tophat_iter);
blackhat_trackbar(Blackhat_iter);
}
void enable_trackbars() //stworzenie suwakow, przypisanie ich do okien, wartosci i funkcji
{
cvCreateTrackbar("Erode it", "Erode1",&Erode_iter,4,erode_trackbar);
cvCreateTrackbar("Dilate it", "Dilate1",&Dilate_iter,4,dilate_trackbar);
cvCreateTrackbar("Open it", "Opening1",&Opening_iter,4,opening_trackbar);
cvCreateTrackbar("Close it", "Closing1",&Closing_iter,4,closing_trackbar);
cvCreateTrackbar("Grad it", "Gradient1",&Gradient_iter,4,gradient_trackbar);
cvCreateTrackbar("Tophat it", "Tophat1",&Tophat_iter,4,tophat_trackbar);
cvCreateTrackbar("Blackhat it", "Blackhat1",&Blackhat_iter,4,blackhat_trackbar);
}
void show_image() //funkcja wywolujaca okna
{
cvShowImage("zwykly",frame);
cvShowImage("Erode1",Erode);
cvShowImage("Dilate1",Dilate);
cvShowImage("Opening1",Opening);
cvShowImage("Closing1",Closing);
cvShowImage("Gradient1",Gradient);
cvShowImage("Tophat1",Tophat);
cvShowImage("Blackhat1",Blackhat);
}
void init() //funkcja inicjujace zmienne
{
capture=cvCaptureFromCAM(CV_CAP_ANY);
if( !capture ) //funkcja zabezpieczająca przed brakiem filmu
{
fprintf( stderr, "Nie masz kamery, Spilberg!" );
getchar();
}
int width=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH)/2; //szerokosc
int height=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT)/2; //wysokosc
cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH,width);
cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT,height);
CvSize size=cvSize (width, height);
IplImage* frame = cvQueryFrame( capture ); //pobranie pierwszej klatki z capture
if( !frame ) //zabezpieczenie przed brakiem klatki
{
fprintf( stderr, "brak klatki!" );
getchar();
}
Erode = cvCloneImage (frame); //kopiowanie klatek do okien poszczegolnych filtrów
Dilate = cvCloneImage (frame);
Opening = cvCloneImage (frame);
Closing = cvCloneImage (frame);
Gradient = cvCloneImage (frame);
Tophat = cvCloneImage (frame);
Blackhat = cvCloneImage (frame);
cvNamedWindow( "zwykly", CV_WINDOW_AUTOSIZE ); //tworzenie okien
cvNamedWindow( "Erode1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Dilate1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Opening1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Closing1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Gradient1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Tophat1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Blackhat1", CV_WINDOW_AUTOSIZE );
}
void clone_images()
{
}
void release() //usuwanie zmiennych z pamieci
{
cvDestroyAllWindows();
cvReleaseImage(&frame);
cvReleaseImage(&Erode);
cvReleaseImage(&Dilate);
cvReleaseImage(&Opening);
cvReleaseImage(&Closing);
cvReleaseImage(&Gradient);
cvReleaseImage(&Tophat);
cvReleaseImage(&Blackhat);
cvReleaseCapture(&capture);
}
int main()
{
init();
enable_trackbars();
while(1) //pętla wykonywana w nieskończoność
{
capture=cvCaptureFromCAM(CV_CAP_ANY);
if( !capture ) //funkcja zabezpieczająca przed brakiem filmu
{
fprintf( stderr, "Nie masz kamery, Spilberg!" );
getchar();
return -1;
}
frame = cvQueryFrame( capture ); //przechwycenie klatki
if( !frame ) //zabezpieczenie przed brakiem klatki
{
fprintf( stderr, "brak klatki2!" );
getchar();
return -1;
}
image_processing();
show_image();
if ((cvWaitKey(10) & 255)== 27) //przerwanie wyswietlania przy naciśnięcu ESC
break;
}
release();
return 0;
}
Zrzut ekranu dokumentujący działanie programu:
Opis dzialania poszczególnych filtrów:
1. Erode rozmycie obrazu
2. Blackhat zaciemnienie obrazu i wyostrzenie krawedzi
3. Closing rozmycie obrazui poprzez rozjasnienie
4. Gradient zaciemnienie obrazu i pokazanie krawędzi na biało
5. Opening rozmazanie krawędzi
6. Dilate rozszerzanie obrazu
7. Tophat przyciemnienie i podkreślenie oświetlenia
Wyszukiwarka
Podobne podstrony:
WdA Lab3 Lukasz Skrodzki
SW LAB2 LukaszJanik
SW LAB1 LukaszJanik
SW LAB4 LukaszJanik
Ewangelia wg św Łukasza E lukasza16
Ewangelia wg św Łukasza E lukasza13
Ewangelia wg św Łukasza E lukasza21
Ewangelia wg św Łukasza E lukasza11
Ewangelia wg św Łukasza
Ewangelia wg św Łukasza E lukasza20
Ewangelia wg św Łukasza E lukasza1
Ewangelia wg św Łukasza E lukasza12
Ewangelia wg św Łukasza E lukasza6
Ewangelia wg św Łukasza E lukasza14
Ewangelia wg św Łukasza E lukasza4
więcej podobnych podstron