Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by lab4 ( 14 years ago )
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <windows.h> // zawiera deklaracje funkcji, struktur i makr używanych w API systemowym Windowsa
#include <iostream>
using namespace std;
CvCapture* capture = NULL; // pusty obiekt capture
int wysokosc = 400; // zmienna na wysokosc
int th =80; // zmienna dla progu binaryzacji
int rozm = 400; // zmienna na rozmiar histogramu
// wskaźniki do obiektów IplImage do przechowywania danych
IplImage *frame = 0;
IplImage *dst = 0;
IplImage *dst_th = 0;
IplImage *frame_histogram = cvCreateImage (cvSize (256,wysokosc),8,1);
CvHistogram *hist = cvCreateHist (1,&rozm;,CV_HIST_ARRAY); // tworzenie pustego histogramu, jednowymiarowego o ilości koszy równej rozm
void init();
void release();
void histogram (IplImage *image);
void trkbar (int th);
void com ();
int k = 0;
int i = 0;
int x[ 99 ];
int y[ 99 ];
CvPoint z[ 99 ];
int main()
{
init(); // wykonaj funkcje init
if( !capture ) // sprawdzenie poprawności powyższej operacji,
{
fprintf( stderr, "Error - nie można zczytać obrazu." ); // wypisz rejestr błędów i komunikat
getchar(); // zczytaj klawisz
return -1; // zwróć wartość -1
}
trkbar (th); // wykonaj funckje trkbar i stwórz trackbar
do // wykonuj w nieskończoność
{
frame = cvQueryFrame( capture ); // Przechwycenie klatki z kamery
cvCvtColor(frame,dst,CV_BGR2GRAY); // konwertuj na skalę szarości
cvCvtColor(frame,dst_th,CV_BGR2GRAY); // konwertuj na skalę szarości
cvThreshold(dst, dst_th, th ,255,CV_THRESH_BINARY_INV); // progowanie binarne
histogram (dst); // wykonaj funkcje histogram
com();
++i;
cvShowImage( "histogram", frame ); // pokaż okno histogram
cvShowImage( "binaryzacja", dst_th ); // pokaż okno binaryzacja
cvShowImage( "kamera", frame_histogram ); // pokaż okno kamera
}
while ((cvWaitKey(10) & 255)!=27); // czekaj na klawisz którego wartość w kodzie ASCII to 27 (ESC)
cvReleaseCapture( &capture; ); // czyszczenie pamięci pod adresem &capture;
cvDestroyWindow( "kamera" ); // usuń stworzone wcześniej okno
cvDestroyWindow( "binaryzacja" ); // usuń stworzone wcześniej okno
cvDestroyWindow( "histogram" ); // usuń stworzone wcześniej okno
cvReleaseHist(&hist;); // zwolnij pamięć z adresu hist
return 0;
}
void init()
{
capture = cvCaptureFromAVI("czarny.avi");
CvSize size = cvSize((int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT)); //zmienna przechowująca rozmiar filmu
int width = (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH);
int height = (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT);
dst = cvCreateImage(CvSize(size),8,1);
dst_th = cvCreateImage(CvSize(size),8,1);
cvNamedWindow( "histogram", CV_WINDOW_AUTOSIZE ); // tworzenie okien
cvNamedWindow( "binaryzacja", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "kamera", CV_WINDOW_AUTOSIZE );
}
void histogram (IplImage *image) // funkcja do tworzenia histogramu
{
cvCalcHist (ℑ,hist); // calculates histogram
cvNormalizeHist (hist,1); // normalization to 1
float max_value_g = 0;
float min_value_g = 0;
cvGetMinMaxHistValue (hist,&min;_value_g,&max;_value_g); // zwraca minima i maksyma z histogramu
cvZero (frame_histogram);
double skala_g = wysokosc/max_value_g;
for (int i=0;i<255;i++) // draws histogram
{
double x_g = cvQueryHistValue_1D (hist,i);
cvLine (frame_histogram,cvPoint((int)i,(int)wysokosc),cvPoint((int)i,(int)(wysokosc - skala_g*x_g)),cvScalar(155.0)) ;
}
}
void trkbar (int th) // funkcja do tworzenia trackbaru
{}
void com()
{
CvMoments moments;
cvMoments( dst_th, &moments;,1);
CvPoint centre_of_mass = cvPoint( (int)(moments.m10/moments.m00),(int)(moments.m01/moments.m00) );
printf("\nCenter of mass coordinates( X , Y ): %d %d\n\n",centre_of_mass.x,centre_of_mass.y);
printf("Moments ( X , Y ): %f %f \n", moments.m20, moments.m02);
x[ i ] = centre_of_mass.x;
y[ i ] = centre_of_mass.y;
printf("Tab x[%d]: %d",i,x[i]);
cout<<"\n";
printf("Tab y[%d]: %d",i,y[i]);
z[i]= cvPoint(x[i],y[i]);
for (k=0;k<i;++k)
{
cvCircle(frame, z[k], 3, cvScalar (0,0,255,0));
}
cvCircle(frame, centre_of_mass, 10, cvScalar(0,255,255,0));
//cvCircle(dst_th, centre_of_mass, 10, cvScalar(0,255,255,0)); // wyświetlanie środka masy na obrazie zbinaryzowanym
}
Revise this Paste