Hola de nuevo, os vuelvo a replantear mi pregunta, pero ahora como lo haría
una persona adultda, cuerda y responsable de sus actos.
Estoy utilizando OpenCV y estoy intentando obtener las coordenadas 3D a
partir de coordenadas en 2D.
Para ello OpenCV está dotada de ciertas funciones que te ayudan a ello.
Mi problema es el siguiente:
declaro:
Cv3dTracker2dTrackedObject object2d[900];
Luego para un mismo punto en dos imágenes diferentes hago:
object2d[b].id = identificador_unico;
object2d[b].p.x = (int)numero_uno;
object2d[b].p.y = (int)numero_dos;
object2d[b+1].id = identificador_unico;
object2d[b+1].p.x = (int)numero_tres;
object2d[b+1].p.y = (int)numero_cuatro;
y para obtener las coodenadas 3D simplemente se utiliza la funcion de
OpenCV:
cv3dTrackerLocateObjects(numero_de_camaras,UNO , camera_info, object2d,
&object);
UNO, es el número de puntos sobre los que deseas obtener las coordenadas 3D,
en mi caso es sólo uno.
Lo de camera_info se obtiene con la función OpenCV,
cv3dTrackerCalibrateCameras, pero esto ya es otra historia.
MI PROBLEMA:
Mediante un bucle While voy recorriendo los puntos que hay en un archivo de
texto:
While(... != EOF ){
object2d[b].id = identificador_unico;
object2d[b].p.x = (int)numero_uno;
object2d[b].p.y = (int)numero_dos;
object2d[b+1].id = identificador_unico;
object2d[b+1].p.x = (int)numero_tres;
object2d[b+1].p.y = (int)numero_cuatro;
identificado_unico++;
b++;
b++;
cv3dTrackerLocateObjects(numero_de_camaras,UNO , camera_info, object2d,
&object);
}
*EL PROBLEMA *es que en este bucle siempre me da el mismo resultado *object
*(es el que almacena las coordenadas 3D).
He detectado que es por culpa de object2d, es decir que si yo hago una
declaración nueva de object2d, por ejemplo. object222d, ahora el resultado
para object si varía.
La forma que tiene cv3dTrackerLocateObjects, es la siguiente:
int cv3dTrackerLocateObjects(int num_cameras,
int num_objects,const Cv3dTrackerCameraInfo camera_info[],const
Cv3dTracker2dTrackedObject tracking_info[],Cv3dTrackerTrackedObject
tracked_objects[]);
No sé se si me he hecho entender.
¿Se os ocurre el por qué puede estar pasando esto?
U otra cosa más sencilla; ¿se os ocurre como dentro del bucle while le puede
ir cambiando el nombre a la variable?
Cv3dTracker2dTrackedObject object2d[900];
No es lo más elegante ni lo más eficiente, pero al menos momentaneamente
solucionaría mi problema.
Saludos.
************************
Algunos nos creemos libres, pero quizá lo que pase es que nos hayamos
acostumbrado a sentir el peso de nuestras cadenas ..., hipotecas, tradición,
prejuicios, comodidad, indiferencia ... .
2008/2/8 Manuel David Jiménez Patiño <[EMAIL PROTECTED]>:
> Vuelvo a escribir el tema que sin querer antes he enviado el e-mail.
>
>
>
> Hola holita, tengo un problemita.
>
> A ver si me pueden ayudar ustedes en mi problema.
>
> Estoy sumido en el mundo de las webcam y de OpenCV.
>
>
> Estoy intentando lo siguiente:
>
> //Declaro esto:
>
> Cv3dTrackerTrackedObject *object*[50];
>
> ..
> ..
> ..
>
> //más tarde hago esto:
>
> while(un archivo != EOF){
>
> ...
>
> ..
>
> cv3dTrackerLocateObjects
> (numero_de_camaras,UNO , camera_info, object2d,* &object[i]*);
>
> i++;
> ..
> }
>
> la función cv3dTrackerLocateObjects está declarada de esta forma:
>
> CvBool cv3dTrackerCalibrateCameras(int num_cameras,const
> Cv3dTrackerCameraIntrinsics camera_intrinsics[],CvSize
> checkerboard_size,IplImage *samples[],Cv3dTrackerCameraInfo camera_info[]);
>
>
> Por lo que deduzco que * &object[i] *lo paso por referencia, es decir que
> paso su dirección de memoria para que los cambios efectuados en
> *
> *CvBool cv3dTrackerCalibrateCameras
>
> se queden guardados.
>
>
> EL PROBLEMA viene cuando:
>
> object[1]
> object[2]
> object[3]
>
> ...
> object[n]
>
> al imprimir su valores todos son igual que object[1]. ¿Por qué puede estar
> sucediendo esto?
>
> ¿Tiene ustedes alguna idea?
>
> Saludos.
>
>
> ************************************
> "¿le molesta que no fume?" Groucho Marx.
>
>
>
>
>
>
>
>
>
>
>
> On Feb 8, 2008 8:39 PM, Manuel David Jiménez Patiño <
> [EMAIL PROTECTED]> wrote:
>
> > Hola holita, tengo un problemita.
> >
> > A ver si me pueden ayudar ustedes en mi problema.
> >
> > Estoy sumido en el mundo de las webcam y de OpenCV.
> >
> >
> > Estoy intentando lo siguiente:
> >
> > //Declaro esto:
> >
> > Cv3dTrackerTrackedObject *object*[50];
> >
> > ..
> > ..
> > ..
> >
> > //más tarde hago esto:
> >
> > while(un archivo != EOF){
> >
> > ...
> >
> > ..
> >
> > cv3dTrackerLocateObjects(numero_de_camaras,UNO , camera_info,
> > object2d,*&object[i]
> > *);
> >
> > i++;
> > ..
> > }
> >
> > la función cv3dTrackerLocateObjects está declarada de esta forma:
> >
> > CvBool cv3dTrackerCalibrateCameras(int num_cameras,const
> > Cv3dTrackerCameraIntrinsics camera_intrinsics[],CvSize
> > checkerboard_size,IplImage *samples[],Cv3dTrackerCameraInfo camera_info[]);
> >
> >
> >
> >
> >
>
_______________________________________________
CRySoL mailing list
http://crysol.inf-cr.uclm.es/
https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol