Welcome, guest! Login / Register - Why register?
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 ASD ( 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);
// tworzenie pustego histogramu, jednowymiarowego o ilości koszy równej rozm
CvHistogram *hist = cvCreateHist (1,&rozm;,CV_HIST_ARRAY); 

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");

//zmienna przechowująca rozmiar filmu
CvSize size = cvSize((int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT)); 
   
    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() // wyswietlanie okręgu na środku cięzkości
{
CvMoments moments; // utworzenie zmiennej typu CvMoments
cvMoments( dst_th, &moments;,1); // obliczenie momentów                               

// wpisanie obliczenie wcześniejszych współrzędnych środka masy do  zmiennej CvPoint centre_of_mass
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; // wpisanie do tablicy wspólrzędnej x-owej na pozycje i tablicy x
y[ i ] = centre_of_mass.y; // wpisanie do tablicy wspólrzędnej y-owej na pozycje i tablicy 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) // pentla odpowiedzialna za rysowanie trajektorii 
{
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

Parent: 47184
Children: 47186
Your Name: Code Language: