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);
}
Afficher la suite