Aukasz Janik, grupa 26
SPRAWOZDANIE
Systemy Wizyjne
Laboratorium 4
Zadanie do wykonania:
Program ma za zadanie wyznaczać wartość środka ciężkości obrazu uzyskanego w wyniku binaryzacji oraz
wyświetlać okrąg reprezentujący środek masy w oknie z obrazem z filmu i oknie z obrazem zbinaryzowanym.
Dodatkowo musi wyświetlać 100 ostatnich położeń środka ciężkości oraz nagrać obraz zbinaryzowany wraz z
zaznaczonymi punktami do pliku avi.
KOD:
#include
#include
#include
#include
#include
using namespace std;
CvCapture* capture = NULL; //Obiekt do przechwycenia kamery
int width, height,th,licznik=0; //Zmienne: rozmiar histogramu, próg binaryzacji,zmienna do
trajketorii
IplImage* frame = 0; //Obiekt przechowujący klatkę z filmu
IplImage* dst = 0; //Obiekt przechowujący klatkę z filmu w skali szarości
IplImage* dst_th = 0; //Obiekt przechowujący klatkę z filmu zbinaryzowaną
CvMoments moments; //Przechowuje położenie momentu
CvPoint centre_of_mass; //Przechowuje położenie środka masy
CvPoint trajek[100]; //Przechowuje ostatnie 100 pkt trajektorii
const char* filename = "filmik.avi"; // Deklaracja pliku wyjściowego
double fps = 30; //Ilość zapisywanych klatek na sekundę
int isColor = 1; //Flaga formatu zapisu filmu 1- kolorowy / 0- czarno-biały
int nagrywaj=0; //Zmienna pomocnicza
CvVideoWriter *writer = NULL; //Wideo Writer
//***********************Deklaracja Funkcji***************************
void init()
{
capture = cvCaptureFromCAM( CV_CAP_ANY ); //Przechwycienie kamery
//capture = cvCaptureFromAVI("out_white.avi"); //Przechwycenie obrazu z filmu out_white
//capture = cvCaptureFromAVI("out_black.avi"); //Przechwycenie obrazu z filmu out_black
width = cvGetCaptureProperty( capture,CV_CAP_PROP_FRAME_WIDTH); //szerokość
klatki
height = cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT); //wysokość
klatki
cvNamedWindow( "on-line", CV_WINDOW_AUTOSIZE ); //Stworzenie okna "on-line" o
dopasowanym rozmiarzepokazujący obraz z kamery
cvNamedWindow( "binaryzacja", CV_WINDOW_AUTOSIZE ); //Stworzenie okna
"binaryzacja" o dopasowanym rozmiarze pokazujący obraz zbinaryzowany
CvSize size = cvSize(width,height); //Zmienna przechowująca rozmiar filmu
dst = cvCreateImage (CvSize(size),8,1); //Stworzenie obrazów o danej wielkości
dst_th = cvCreateImage (CvSize(size),8,1); //Potrzebnych do binaryzacji
writer = cvCreateVideoWriter(filename, 0 ,fps,size, isColor); //Inicjalizzacja wideo Writera
}
void release() //Zamykanie okien, uwalnianie zarezerwowaniej pamięci
{
cvDestroyAllWindows();
cvReleaseImage (&dst);
cvReleaseImage (&dst_th);
cvReleaseCapture (&capture);
cvReleaseVideoWriter( &writer );
}
void trkbar (int th) //Pusta funkcja
{}
void com() //Wyznaczenie środka masy obrazu po binaryzacji
{
cvMoments(dst_th,&moments,1); //Oblicza momenty
centre_of_mass=cvPoint((int)(moments.m10/moments.m00),(int)
(moments.m01/moments.m00)); //Obliczanie współrzędnych środka ciężkości dla filmu
printf("\nCenter of mass coordinates( X , Y ): %d
%d\n\n",centre_of_mass.x,centre_of_mass.y); //Wypisanie na ekran
printf("Moments ( X , Y ): %f %f \n", moments.m20, moments.m02);
cvCircle(frame, centre_of_mass, 10, cvScalar(0,255,0,0),2); //Rysuje okręgi
cvCircle(dst_th, centre_of_mass, 10, cvScalar(140,0,0,0),2);
trajek[licznik]=centre_of_mass;
licznik++;
if (licznik==99)
licznik=0;
}
//***************************Główna Funkcja********************************
int main()
{
th=170; //Ustwia próg binaryzacji
init();
cvCreateTrackbar ("trackbar", "binaryzacja",&th,255,trkbar); //Trackbar do zmiany progru
binaryzacji
if( !capture ) //Funkcja zabezpieczająca przed brakiem kamery/filmu
{
fprintf( stderr, "Brak kamery" );
getchar();
return -1;
}
while(1)
{
frame = cvQueryFrame( capture ); // Przechwycenie klatki z kamery
if( !frame ) //Funkcja zabezpieczająca przed brakiem klatki z kamery
{
fprintf( stderr, "Brak klatki" );
getchar();
return -1;
}
cvCvtColor(frame,dst,CV_BGR2GRAY); //Konwersja z koloru do odcieni szarości
cvCvtColor(frame,dst_th,CV_BGR2GRAY); //Konwersja z koloru do odcieni szarości
cvThreshold(dst, dst_th, th ,255,CV_THRESH_BINARY); //Progowanie obrazu zwykła
binaryzacja film "out_white"
//cvThreshold(dst, dst_th, th ,255,CV_THRESH_BINARY_INV); //Progowanie obrazu
binaryzacja odwrotnafilm "out_black"
com();
for (int i=0;i<100;i++) //Wykreślanie trajektorii
{
cvCircle(frame, trajek[i], 3, cvScalar(0,255,0,0),1); //Rysuje okręgi
cvCircle(dst_th, trajek[i], 3, cvScalar(140,0,0,0),1);
}
cvShowImage( "on-line", frame ); // Wyświetlanie klatki w oknie o nazwie on-line
cvShowImage( "binaryzacja", dst_th ); // Wyświetlanie klatki w oknie o nazwie
binaryzacja
cvWriteFrame(writer, dst_th); // Zapis poszczególnych klatek
if ((cvWaitKey(10) & 255)== 27 ) // Wyjście z nieskończonej pętli jeśli wciśnięty 'Esc'
break;
}
release(); // Funkcja zakańczająca program
system("pause");
return 0;
}
Wyszukiwarka
Podobne podstrony:
WdA Lab4 Lukasz Skrodzki
SW LAB2 LukaszJanik
SW LAB3 LukaszJanik
SW LAB3 LukaszJanik
SW LAB1 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