OPEN CV lab 5

Marcin Matras, rok 3, grupa25A

Systemy wizyjne

Open CV – lab5A

  1. Celem laboratoriów było zapoznanie się z czterema podstawowymi typami filtrów morfologicznych oraz zbadanie przefiltrowanego obrazu

  2. Kod programu

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

#include <windows.h>

CvCapture* capture = NULL; // pusty obiekt capture

// zmienne do wykorzystania w suwakach zmieniających parametry filtrów

int erode_iter = 1;

int dilate_iter = 1;

int open_iter = 1;

int clos_iter = 1;

// wskaźniki do obiektów IplImage dla obrazu i filtrów

int th = 60;//zmienna przechowująca prug binaryzacji

IplImage *dst = 0;

IplImage *dst_th = 0;

IplImage *frame = 0;

IplImage *erode = 0;

IplImage *dilate = 0;

IplImage *opening = 0;

IplImage *closing = 0;

IplImage *temp;

// funkcje tworzące suwaki

void dilate_trackbar(int dilate_iter);

void clos_trackbar(int clos_iter);

void open_trackbar(int open_iter);

void erode_trackbar(int erode_iter);

void trkbar(int th);//do symuacji zmiany położenia suwaka

// deklaracja funkcji

void image_processing();

void enable_trakcbars();

void show_image();

void init();

void clone_images();

void release();

void init()

{

capture = cvCaptureFromCAM( CV_CAP_ANY ); // przypisanie do obiektu capture obrazu z kamery

//pobranie klatki z capture

IplImage* frame = cvQueryFrame(capture);

int width = (int)cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH,320);

int height = (int)cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT,240);

CvSize size = cvSize((int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT));

dst = cvCreateImage (CvSize(size),8,1);

dst_th = cvCreateImage (CvSize(size),8,1);

// kopiowanie klatki frame

erode = cvCloneImage(dst_th);

dilate = cvCloneImage(dst_th);

opening = cvCloneImage(dst_th);

closing = cvCloneImage(dst_th);

// tworzenie okien do wyświetlania obrazu bazowego i wyników działania filtrów

cvNamedWindow("erode", CV_WINDOW_AUTOSIZE);

cvNamedWindow("dilate", CV_WINDOW_AUTOSIZE);

cvNamedWindow("opening", CV_WINDOW_AUTOSIZE);

cvNamedWindow("closing", CV_WINDOW_AUTOSIZE);

cvNamedWindow( "treshold", CV_WINDOW_AUTOSIZE );

}

void image_processing()

{

// wywołanie funkcji odpowiadających za suwaki

erode_trackbar((int) erode_iter);

dilate_trackbar((int) dilate_iter);

open_trackbar((int) open_iter);

clos_trackbar((int) clos_iter);

trkbar((int) th);

}

void enable_trakcbars()

{

// tworzenie trackbarów

cvCreateTrackbar("erode", "erode", &erode_iter, 6, erode_trackbar);

cvCreateTrackbar("dilate", "dilate", &dilate_iter, 6, dilate_trackbar);

cvCreateTrackbar("closing", "closing", &clos_iter, 6, clos_trackbar);

cvCreateTrackbar("opening", "opening", &open_iter, 6, open_trackbar);

cvCreateTrackbar ("treshold","obraz",&th,255,trkbar);

}

void show_image()

{

// przedstawienie wszystkich utworzonych obrazów

cvShowImage("erode", erode);

cvShowImage("dilate", dilate);

cvShowImage("closing", closing);

cvShowImage("opening", opening);

cvShowImage("threshold", dst_th);

}

// funkcje odpowiadające za suwaki do zmiany parametrów algorytmów

void trkbar (int th)

{

}

void erode_trackbar(int erode_iter)

{

cvErode (dst_th,erode,0,erode_iter);

}

void dilate_trackbar(int dilate_iter)

{

cvDilate (dst_th,dilate,0,dilate_iter);

}

void clos_trackbar(int clos_iter)

{

cvMorphologyEx (dst_th,closing,temp,CV_SHAPE_RECT,CV_MOP_CLOSE,clos_iter);

}

void open_trackbar(int open_iter)

{

cvMorphologyEx (dst_th,opening,temp,CV_SHAPE_RECT,CV_MOP_OPEN,open_iter);

}

void release()

{

cvDestroyAllWindows(); //usunięcie wszystkich okien

//usunięcie obiektów IplImage

cvReleaseImage(&temp);

cvReleaseImage(&frame);

cvReleaseCapture(&capture); // usunięcie obiektu capture

cvReleaseImage(&erode);

cvReleaseImage(&opening);

cvReleaseImage(&closing);

cvReleaseImage(&dilate);

cvReleaseImage (&dst_th);

cvReleaseImage (&dst);

}

int main() {

init(); // wywołanie funkcji init()

enable_trakcbars(); //wywołanie funkcji enable_trakcbars()

if (!capture)

{

fprintf(stderr, "blad");

getchar();

return -1;

}

while (1) // pętla nieskończona

{

frame = cvQueryFrame(capture); // pobranie klatki z obiektu captrure

cvCvtColor(frame,dst,CV_BGR2GRAY);

cvCvtColor(frame,dst_th,CV_BGR2GRAY);

cvThreshold(dst, dst_th, th ,255,CV_THRESH_BINARY);

show_image(); // wywołanie funkcji show_image()

image_processing(); // wywołanie funkcji image_processing()

if ((cvWaitKey(10) & 255) == 27) // pętla sprawdzająca czy został naciśnięty ESC

{ break; }

}

release(); // wywołanie funkcji release()

}

  1. Wynik działania programu dla różnych progów binaryzacji

Rys1. Działanie różnych filtrów dla progu binaryzacji 125

Rys2. Działanie różnych filtrów dla progu binaryzacji 64

  1. Opis filtrów morfologicznych

  1. Filtr erode

  1. Filtr dilate

  1. Filtr closing

  1. Filtr opening

Marcin Matras, rok 3, grupa25A

Systemy wizyjne

Open CV – lab5B

  1. Zapoznanie się z filtrami przestrzennymi oraz zbadanie wpływu działania danego filtru na obraz

  2. Kod programu

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

CvCapture* capture; //wskaźnik na obiekt CvCapture

//zmienne przechowujące wartości masek filtrów

int blurns_iter,blur_iter,gauss_iter,med_iter,bil_iter,sob_iter,lap_iter;

int width=320, height=240; //zmienne rozmiarów obrazu

//wskaźniki na obiekty graficzne

IplImage *frame=0,*blurns=0,*blur=0,*gauss=0,*med=0,*bil=0,*sob=0,*lap=0,*temp=0;

void init();//przypisanie wartości zmiennym, adresowanie wskaźników

void release();//zwolnienie zasobów

void show_images();//wyświetlanie obrazu

void image_processing();//filtrowanie

void enable_trackbars();//utworzenie suwaków

//obsługa suwaków

void blurns_trackbar(int t) {blurns_iter=t;}

void blur_trackbar(int t) {blur_iter=t;}

void gauss_trackbar(int t) {gauss_iter=t;}

void med_trackbar(int t) {med_iter=t;}

void bil_trackbar(int t) {bil_iter=t;}

void sob_trackbar(int t) {sob_iter=t;}

void lap_trackbar(int t) {lap_iter=t;}

int main()

{

init();

enable_trackbars();

while((cvWaitKey(10)&255)!=27)

{ //pobranie klatki filmu

frame = cvQueryFrame(capture);

if(!frame) //działanie w razie niepowodzenia odczytu klatki

{ //odpowiedni komunikat i zakończenie programu

fprintf(stderr, "błąd wyswietlenia");

getchar();

return -1;

}

image_processing();

show_images();

}

release(); //zwolnienie zasobów

return 0;

}

void init()

{

capture=cvCaptureFromCAM(CV_CAP_ANY);

//zaadresowanie wskaźnika

if(!capture) //działanie w razie niepowodzenia

{

capture=cvCaptureFromAVI(CV_CAP_ANY);

if(!capture)

{

fprintf(stderr, "błąd odczytu");

getchar();

}

}

//przypisanie wymiarów zmiennym

width = (int)cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH, 300);

height = (int)cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT, 200);

CvSize size = cvSize(width,height);

frame=cvQueryFrame(capture);

if(!frame) //działanie w razie niepowodzenia odczytu klatki

{ //odpowiedni komunikat i zakończenie programu

fprintf(stderr, "błąd wyswietlenia");

getchar();

}

//definicja obrazów o wymiarach klatki frame

blurns=cvCloneImage(frame);

blur=cvCloneImage(frame);

gauss=cvCloneImage(frame);

med=cvCloneImage(frame);

bil=cvCloneImage(frame);

sob=cvCreateImage(cvGetSize(frame),IPL_DEPTH_16S,1);

temp=cvCreateImage(cvGetSize(frame),8,1);

lap=cvCreateImage(cvGetSize(frame),IPL_DEPTH_16S,3);

cvNamedWindow("Lab 6"); //utworzenie okien

cvNamedWindow("Blur no scale");

cvNamedWindow("Blur");

cvNamedWindow("Gauss");

cvNamedWindow("Median");

cvNamedWindow("Bilateral");

cvNamedWindow("Sobel");

cvNamedWindow("Laplace");

}

void release()//zwolnienie zsaobów, zamknięcie okien

{

cvDestroyAllWindows();

cvReleaseImage (&frame);

cvReleaseImage (&blurns);

cvReleaseImage (&blur);

cvReleaseImage (&gauss);

cvReleaseImage (&med);

cvReleaseImage (&bil);

cvReleaseImage (&sob);

cvReleaseImage (&lap);

cvReleaseCapture(&capture);

}

void image_processing() //wywołanie filtrów

{

//blurn_iter, bil_iter, lap_iter muszą być >0

if(blurns_iter==0)blurns_iter=1;

if(bil_iter==0)bil_iter=1;

if(lap_iter==0)lap_iter=1;

//filtrowanie

cvSmooth(frame, blurns,CV_BLUR_NO_SCALE,blurns_iter,blurns_iter);

//gauss_iter, blur_iter, med_iter muszą być nieparzyste

if(gauss_iter%2==1) cvSmooth(frame,gauss,CV_GAUSSIAN,gauss_iter,gauss_iter);

else cvSmooth(frame,gauss,CV_GAUSSIAN,gauss_iter+1,gauss_iter+1);

if(blur_iter%2==1) cvSmooth(frame,blur,CV_BLUR,blur_iter,blur_iter);

else cvSmooth(frame,blur,CV_BLUR,blur_iter+1,blur_iter+1);

if(med_iter%2==1) cvSmooth(frame,med,CV_MEDIAN,med_iter,med_iter);

else cvSmooth(frame,med,CV_MEDIAN,med_iter+1,med_iter+1);

//cvSmooth(frame, bil, CV_BILATERAL,21,21,bil_iter,bil_iter);

cvCvtColor(frame,temp,CV_BGR2GRAY);

if(sob_iter%2==1) cvSobel(temp,sob,0,1,sob_iter);

else cvSobel(temp,sob,0,1,sob_iter+1);

if(lap_iter%2==1) cvLaplace(frame,lap,lap_iter);

else cvLaplace(frame,lap,lap_iter+1);

blurns_trackbar(blurns_iter);//obsługa suwaków

blur_trackbar(blur_iter);

gauss_trackbar(gauss_iter);

med_trackbar(med_iter);

bil_trackbar(bil_iter);

sob_trackbar(sob_iter);

lap_trackbar(lap_iter);

}

void enable_trackbars()

{

cvCreateTrackbar("blur no scale", "Blur no scale",&blurns_iter,8, blurns_trackbar);

cvCreateTrackbar("blured", "Blur",&blur_iter,200, blur_trackbar);

cvCreateTrackbar("gaussian", "Gauss",&gauss_iter,200, gauss_trackbar);

cvCreateTrackbar("median", "Median",&med_iter,200, med_trackbar);

cvCreateTrackbar("bilateral", "Bilateral",&bil_iter,200, bil_trackbar);

//sob_iter, lap_iter muszą być < 32

cvCreateTrackbar("sobel", "Sobel",&sob_iter,31, sob_trackbar);

cvCreateTrackbar("laplace", "Laplace",&lap_iter,31, lap_trackbar);

}

void show_images()

{ //wyświetlenie obrazów w oknach

cvShowImage("Lab 6",frame);

cvShowImage("Blur",blur);

cvShowImage("Blur no scale",blurns);

cvShowImage("Gauss",gauss);

cvShowImage("Median",med);

cvShowImage("Bilateral",bil);

cvShowImage("Sobel",sob);

cvShowImage("Laplace",lap);

}

  1. Wynik działania programu

Rys1. Przedstawienie wyników dla niskiego poziomu filtracji

Rys1. Przedstawienie wyników dla średniego poziomu filtracji


Wyszukiwarka

Podobne podstrony:
open colector, Mechatronika, Rok II, Semestr III, Elektronika, Lab
spis lab I sem 2010
III WWL DIAGN LAB CHORÓB NEREK i DRÓG MOCZ
Diagnostyka lab wod elektrolit
ZW LAB USTAWY, OCHRONA
LAB PROCEDURY I FUNKCJE
Dokumenty aplikacyjne CV list
System open source NauDoc (1)
sprzet lab profilografy
sprzet lab mikromanometry
Mechanika Plynow Lab, Sitka Pro Nieznany
Lab 02 2011 2012
cv 98207135p
PO lab 5 id 364195 Nieznany
lab pkm 4
MSIB Instrukcja do Cw Lab krystalizacja

więcej podobnych podstron