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 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 (&image;,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

Your Name: Code Language: