Flot optique

Fermé
opencv Messages postés 1 Date d'inscription mardi 15 mars 2016 Statut Membre Dernière intervention 15 mars 2016 - 15 mars 2016 à 17:51
bonjour,
j'ai un programme sur le flot optique codé sur le langage C et je voudrais le compiler dans visual studio 2010 et bien sur avec la bibliothèque Opencv mais il faut d'abord le convertir en C++.
est-ce-que peut-on avoir de l'aide?
vous trouverez le code ci-dessous
Merci, cordialement.

Le code

/********************************************************************
Flot optique
                                                                                                                                        • /


void Horn(IMAGE *in_imagePrec,IMAGE *in_image,int w, int h, double *U, double *V)

{


double *gx;
double *gy;
double *gt;

double *um;
double *vm;

int x,y;
int n;

double f1C, f1D, f1B, f1BD;
double f2C, f2D, f2B, f2BD;
double P, D;



gx = (double *)malloc(w*h*sizeof(double));
gy = (double *)malloc(w*h*sizeof(double));
gt = (double *)malloc(w*h*sizeof(double));

um = (double *)malloc(w*h*sizeof(double));
vm = (double *)malloc(w*h*sizeof(double));

/* initialisation de l'image de sortie */

for (x=0;x<h;x++)
for (y=0;y<w;y++){
gx[x*w+y] = 0.;
gy[x*w+y] = 0.;
gt[x*w+y] = 0.;
}

/* calcul des gradients en x, y et t */

for (x=0;x<h-1;x++)
for (y=0;y<w-1;y++)
{

f1C = in_imagePrec->pixel[x*w+y];
f1B = in_imagePrec->pixel[(x+1)*w + y];
f1D = in_imagePrec->pixel[x*w + y+1];
f1BD = in_imagePrec->pixel[(x+1)*w + y+1];

f2C = in_image->pixel[x*w + y];
f2B = in_image->pixel[(x+1)*w + y];
f2D = in_image->pixel[x*w + y+1];
f2BD = in_image->pixel[(x+1)*w + y+1];

gy[x*w+y] = (- f1C + f1D - f1B + f1BD - f2C + f2D - f2B + f2BD)/4.;
gx[x*w+y] = (- f1C - f1D + f1B + f1BD - f2C - f2D + f2B + f2BD)/4.;
gt[x*w+y] = (- f1C - f1D - f1B - f1BD + f2C + f2D + f2B + f2BD)/4.;


}


/* processus iteratif */

for (n=1;n<=NBITERATIONS;n++)
{


for (x=1;x<h-1;x++)
for (y=1;y<w-1;y++)
{

um[x*w+y] = ( U[(x-1)*w + y] + U[x*w + y-1] + U[x*w + y+1] + U[(x+1)*w + y]) / 6.
+
( U[(x-1)*w + y-1]
+ U[(x-1)*w + y+1]
+ U[(x+1)*w + y-1]
+ U[(x+1)*w + y+1]) / 12.;

vm[x*w+y] = ( V[(x-1)*w + y] + V[x*w + y-1] + V[x*w + y+1] + V[(x+1)*w +y]) / 6.
+
( V[(x-1)*w + y-1]
+ V[(x-1)*w + y+1]
+ V[(x+1)*w + y-1]
+ V[(x+1)*w + y+1]) / 12.;

}

for (x=1;x<h-1;x++)
for (y=1;y<w-1;y++)
{


P = (gx[x*w+y] * um[x*w+y]) + (gy[x*w+y] * vm[x*w+y]) + gt[x*w+y];
D = 1.0 / ((ALPHA * ALPHA) + (gx[x*w+y] * gx[x*w+y]) +(gy[x*w+y] * gy[x*w+y]));

U[x*w+y] = um[x*w+y] - gx[x*w+y] * P * D;
V[x*w+y] = vm[x*w+y] - gy[x*w+y] * P * D;



}

}







free(gx);
free(gy);
free(gt);
free(um);
free(vm);
}