Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/multi/SRC/CalibradorColor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'multi/SRC/CalibradorColor.cpp')
-rw-r--r--multi/SRC/CalibradorColor.cpp731
1 files changed, 0 insertions, 731 deletions
diff --git a/multi/SRC/CalibradorColor.cpp b/multi/SRC/CalibradorColor.cpp
deleted file mode 100644
index f7d4f6b..0000000
--- a/multi/SRC/CalibradorColor.cpp
+++ /dev/null
@@ -1,731 +0,0 @@
-/*
- * CalibradorColor.cpp
- *
- * Created on: 30/11/2010
- * Author: seba
- */
-
-/*
- * CalibradorAR.cpp
- *
- * Created on: 8/09/2010
- * Author: smarichal
- */
-#include "Utilidades.h"
-#include "UtilidadesSDL.h"
- /********************************************************************************************************************************
- * CONFIGURACION DE ARTOOLKIT Y MARCADORES
- ********************************************************************************************************************************/
-
-#ifdef _WIN32
-char *vconf = "Data\\WDM_camera_flipV.xml";
-#else
-char *vconf = "";
-#endif
-
-int count = 0;
-
-
-
-char *config_nameCalibrador = "Data/prototipo1/prototipo1.dat";
-//char *config_nameCalibrador = "Data/prototipo1_SeleccionSimple/mezclados2.dat";
-//char *config_nameCalibrador = "Data/prototipo1_SeleccionSimple/mezclados2.dat";
-
-ArtoolkitData dataAR;
-PropiedadesCalibracion propiedadesCalibracion;
-RangosColorApuntador rangosEscalaColor;
-int usarAlgoritmoRapido = 0;
-int mostrarDebugAR = 0;
-int aplicarMascara = 0;
-
-int h_bins = 30; //El histograma de HUE lo dividimos en 30 partes iguales
-int s_bins = 20; //El histograma de SATURATION lo dividimos en 20 partes iguales
-int v_bins = 20; //El histograma de BRIGHTNESS lo dividimos en 20 partes iguales
-
-
-//FIXME hay que seleccionar los marcadores de manera no secuencial y que no se repitan. Por el momento comienza en 0 y se va incrementando de a 1
-int id_marcador =0;
-int tipoMascara = TIPO_MASCARA_BINARIA;
-
-int err_deteccion;
-
-//Solo para debug, borrar
-IplImage* imgHsv = NULL;
-IplImage* imgC = NULL;
-CvRect rectangulo;
-//----------
-/******************************************************************************************************************************************
- * VARIABLES DEL CALIBRADOR
- *****************************************************************************************************************************************/
-int cantidad_muestras= 6;
-int res_aplicar_mascara;
-int muestra = 0;
-
-int factorProporcionMaximoH = 10;
-int porcentajeMinimoRuido = 7;
-
-int tomar_muestra = 0;
-int aplicar_mascara;
-int aplicar_nueva_mascara;
-/************************************************************************
- * LAS SIGUIENTES SON EL PROTOTIPO CLICKS, NO TIENEN NADA QUE VER CON EL CALIBRADOR COLOR
- *
- */
-int jugar = 0;
-int mostrarVideo = 0;
-int mostrarRadar =0;
-
- /***************************************************************************************************************************************
- * DECALRACIONES DE FUNCIONES AUXILIARES Y VARIABLES AUXILIAREAS
- ****************************************************************************************************************************************/
-static void keyEvent( unsigned char key, int x, int y);
-static void mainLoop(void);
-static void proximoElemento();
-static void actualizarPantalla();
-static void mainLoopClicks();
-static void initClicksCV();
-
-
-void initRangosColor(){
- rangosEscalaColor.hmin = 1; //Teoricamente seria correcto que hmin fuera 0. Lo ponemos en 1
- //Porque los negros totales y los blancos totales son convertidos
- //con H=0 y eso lleva a que se introduzca ruido en el histograma
-
- rangosEscalaColor.hmax = 360;
- rangosEscalaColor.smin = 0;
- rangosEscalaColor.smax = 100;
- rangosEscalaColor.vmin = 0;
- rangosEscalaColor.vmax = 100;
-}
-
-
-void calibrar(PropiedadesCalibracion* propiedades, ArtoolkitData* data){
- if(tomar_muestra){
- printf("Tomo la muestra!!!!!\n");
- int err_tomarMuestra = tomarMuestraApuntador(propiedades,data);
-
- if(err_tomarMuestra==ERROR_TOMAR_MUESTRA_FORMA_NO_IMPLEMENTADA){
- fprintf(stderr, "Error, no se pudo tomar muestra. Forma no implementada\n");
- }else if(err_tomarMuestra==ERROR_TOMAR_MUESTRA_OK){
- printf("Muestra tomada OK\n");
- }
- tomar_muestra=0;
- id_marcador++; //FIXME no se debe incrementar asi porque se va a seleccionar de alguna manera mas inteligente, capaz aleatorio
- muestra++;
- }else{
- capturarImagenAR(data);
- if(aplicar_mascara){
- if(aplicar_nueva_mascara){ //Calculo la nueva mascara y la aplico
- err_deteccion = detectarYCalcularPosicionTodosMultiMarkers(data);
- if(err_deteccion==DETECCION_CORRECTA){
- res_aplicar_mascara = aplicarNuevaMascaraCalibrador(propiedades,data,id_marcador,tipoMascara);
- if(res_aplicar_mascara==MASCARA_APLICADA){
- printf("Se aplico la mascara correctamente\n");
- aplicar_nueva_mascara = 0;
- }
- }else{
- printf("err_deteccion= %d \n",err_deteccion);
- }
- }else{ //No calculo nueva mascara pero la aplico
- aplicarMascaraCalibrador(propiedades,data,tipoMascara);
- }
- }
- desplegarImagen(data);
-
-
- arUtilSleep(90000); //FIXME dormir segun el fps
- arVideoCapNext(); //Si no pongo el capnext dsps del sleep a veces pisa la imagen
- }
-}
-
-void desplegarRangosColor(RangosColorApuntador rangos){
- printf("--------Rangos de Color--------\n");
- printf("Hue: [%d,%d]\n",rangos.hmin,rangos.hmax);
- printf("Saturation: [%d,%d]\n",rangos.smin,rangos.smax);
- printf("Brightness: [%d,%d]\n",rangos.vmin,rangos.vmax);
- printf("--------------------------------\n");
-}
-
-void mainL(void){
-
- if(muestra<cantidad_muestras){
- calibrar(&propiedadesCalibracion,&dataAR);
- }else if(!jugar){
- printf("Ya se tomaron todas las muestras, ahora se procesan los histogramas\n");
- calcularResultadosCalibracionApuntador(&propiedadesCalibracion,&dataAR,factorProporcionMaximoH,porcentajeMinimoRuido);
- printf("Resultados:\n");
- desplegarRangosColor(propiedadesCalibracion.resultado_rangos_color);
- printf("Fin de la calibracion\n");
-
- //Inicializo clicksCV
- printf("Inicializo Prototipo clicks CV\n");
- initClicksCV();
- printf("PPPPPPPPPPP Prototipo INICIALIZADO!!!!\n");
- jugar=1;
- }else{ //estoy en el juego
- mainLoopClicks();
- }
-}
-
-int main(int argc, char **argv)
-{
- glutInit(&argc, argv);
- printf("InitAR\n");
- initAR(&dataAR,config_nameCalibrador,vconf,usarAlgoritmoRapido,2.0);
- printf("Init Rangos Color\n");
- initRangosColor();
- printf("Init prop calib \n");
- initPropiedadesCalibracionSoloApuntador(cantidad_muestras,FORMA_APUNTADOR_CIRCULO,&dataAR,&propiedadesCalibracion,rangosEscalaColor,h_bins,s_bins,v_bins,1);
- propiedadesCalibracion.debug_imagenes=0;
- aplicar_mascara=1;
- aplicar_nueva_mascara=1;
- arVideoCapStart();
- printf("main loop\n");
- argMainLoop( NULL, keyEvent, mainL);
- return (0);
-}
-
-
-static void keyEvent( unsigned char key, int x, int y)
-{
- /* quit if the ESC key is pressed */
- if( key == 0x1b ) {
- printf("*** %f (frame/sec)\n", (double)count/arUtilTimer());
- cleanupAR();
- exit(0);
- }
-
- if( key == SDLK_RETURN){
- tomar_muestra = 1;
- aplicar_nueva_mascara = 1 -aplicar_nueva_mascara;
- aplicar_mascara = 1;
- }
-
- if( key == 'a'){
- aplicar_mascara = 1 - aplicar_mascara;
- }
-
- if( key == 'n'){
- aplicar_nueva_mascara = 1 -aplicar_nueva_mascara;
- aplicar_mascara = 1;
- }
-
- if( key == 'u'){
- if(tipoMascara==TIPO_MASCARA_BINARIA){
- tipoMascara=TIPO_MASCARA_ATENUANTE;
- printf("Usando mascara ATENUANTE!\n");
- }else{
- tipoMascara=TIPO_MASCARA_BINARIA;
- printf("Usando mascara BINARIA!\n");
- }
- }
-
- if( key == 't' ) {
- printf("count = %d\n",count);
- printf("timer = %f\n",arUtilTimer());
- printf("*** %f (frame/sec)\n", (double)count/arUtilTimer());
- printf("Enter new threshold value (current = %d): ", dataAR.thresh);
- scanf("%d",&dataAR.thresh); while( getchar()!='\n' );
- printf("\n");
- count = 0;
- }
-
- /* turn on and off the debug mode with right mouse */
- if( key == 'd' ) {
- mostrarDebugAR = 1 - mostrarDebugAR;
- mostrarImagenDebugAR(mostrarDebugAR);
- }
-
-
-
- /***Solo para el prototipo clicks, no debe estar aca, es de ultimo momento***/
- if( key == SDLK_SPACE) {
- printf("Proximo\n");
- proximoElemento();
- actualizarPantalla();
-
- }
-
-
- if( key == 'r' ) {
- printf("Mostrar Radar\n");
- mostrarRadar = 1 - mostrarRadar;
- if(!mostrarRadar){
- argCleanWindow(2,1);
- }
- }
-
- if( key == 'v' ) {
- mostrarVideo = 1 - mostrarVideo;
- if(!mostrarVideo){
- argCleanWindow(0,0);
- }
- }
-
- if( key == SDLK_1 ) {
- propiedadesCalibracion.restarAlRadio +=5;
- aplicar_nueva_mascara = 1;
- aplicar_mascara = 1;
- }
-
- if( key == SDLK_2 ) {
- propiedadesCalibracion.restarAlRadio -=5;
- aplicar_nueva_mascara = 1;
- aplicar_mascara = 1;
- }
-
-
-
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-///////////////*****************************PROTOTIPO SELECCION SIMPLE********************************************////////////////////
-
-#define MAX_MARCADORES 30
-#define MIN_AREA 500
-int min_area = 1500;
-float factor = 1.0;
-
-
-/* Representacion de los elementos*/
-Elemento elementos[MAX_MARCADORES]; //El indice el elemento coincide con el id del elemento que tambien coincide con el id del marcador artoolkit
-int cantElementosCargados = 0;
-
-int elementoActual = -1; //indice del elemento que esta en pantalla
-
-int correspondenciaCorrecta = 0; //indica si el elemento del conjunto A y el del conjunto B
- // que se seleccionaron se corresponden
-int correspondenciaIncorrecta = 0;
-
-int xNombreRelacion = 200;
-int yNombreRelacion = 15;
-
-int xImagen = 135;
-int yImagen = 100;
-
-
-int anchoPantalla = 655;
-int altoPantalla = 700;
-
-//Son los id de las imagenes actualmente desplegadas en la pantalla
-int idSDLImagenPantalla = -1;
-
-
-//Sonidos del click y de error
-char clickSound[255];
-char errorSound[255];
-
-//Variable para mantener el historico de los ultimos marcadores seleccionados
-//Lo usamos como buffer circular
-Historico historico;
-
-#define CONJUNTO_A 0
-#define CONJUNTO_B 1
-
-
-IplImage* img =NULL;
-uchar* data1 =NULL;
-IplImage* mono_Image = NULL;
-
-/*La posicion i del arreglo corresponde al marcador con con patt_id=i*/
-ARCoordMarcador marcadoresOcultos[MAX_MARCADORES]; //MAX_MARCADORES es la maxima cantidad -1 de marcadores que la aplicacion puede manejar.
-
-
-int debugImg = 0; //Parametro para hayObjetoColor. Si se le pasa 1 y se le pasa una ventana entonces va reproduciendo el ROI. Sino crea una ventana nueva pero detiene la aplicacion hasta tocar una tecla
-#define ERODE 1
-#define DILATE 1
-#define SMOOTH 1
-#define OFFSET_ROI 5 //Cuanto mas grande mas grande sera el ROI donde busco el apuntador
-#define MIN_AREA_WIDTH_HEIGHT 5 //Este valor sirve para indicar cual es el area minima en la cual se busca un apuntador.
- //Por ejemplo si el marcador se encuentra apenas dentro de la pantalla y el height o el width no superan este valor entonces
- //el area no sera analizada en busca de un apuntador
-#define CANT_HISTORIA 4
-
-static void proximoElemento(){
- if(elementoActual == cantElementosCargados -1){//TODO Vuelve a comenzar o mensaje de exito y finaliza??
- elementoActual = 0;
- }else{
- elementoActual++;
- }
-}
-
-static void proximoElemento();
-static void actualizarPantalla(){
- if(elementoActual!=-1){
- if(elementos[elementoActual].idImagenSDL == idSDLImagenPantalla && idSDLImagenPantalla >= 0){
- printf("Se sigue con la misma imagen, no se hace nada");
- }else{
- if(idSDLImagenPantalla!=-1){
- OcultarImage(idSDLImagenPantalla,0);
- }
- if( (elementos[elementoActual].idImagenSDL == -1) ){ //Todavia no se cargo la imagen para este elemento
- printf("voy a desplegar la imagen: %s\n",elementos[elementoActual].imagen);
- elementos[elementoActual].idImagenSDL = PlayImageConTitulo( elementos[elementoActual].imagen, elementos[elementoActual].nombre,xImagen,yImagen,0);
- idSDLImagenPantalla = elementos[elementoActual].idImagenSDL; //Actualizo el id de la imagen mostrada actualmente
- printf("IdSDLA = %d\n",idSDLImagenPantalla);
- }else{
- mostrarImagen(elementos[elementoActual].idImagenSDL,0);
- idSDLImagenPantalla = elementos[elementoActual].idImagenSDL;
- }
- }
-
- if(correspondenciaCorrecta){
- OcultarZona(xNombreRelacion,yNombreRelacion,anchoPantalla - xNombreRelacion,yImagen - yNombreRelacion,0); //Borro la zona superior de la pantalla que es donde esta escrito el texto
- EscribirTexto(elementos[elementoActual].nombreRelacion,xNombreRelacion,yNombreRelacion,0);
- PlaySound(elementos[elementoActual].sonido);
- }else if(correspondenciaIncorrecta){
- PlaySound(errorSound);
- }
-
- }else{
- EscribirTexto("Prototipo - Estado Inicial",xNombreRelacion,yNombreRelacion,0);
- }
- //Actualizo la pantalla
- printf("Flip antes\n");
- flip();
- printf("Flip dsps\n");
-}
-
-
-/**
- * Recibe el indice del marcador no detectado y chequea si algun apuntador esta colisionando con el mismo.
- * Devuelve el area del apuntador detectado o 0 en caso de no haber detectado ninguno.
- */
-float hayColision(int indiceMarcdor, ARUint8 *dataPtr){
-//TODO Ver si es necesario crear la imagen opencv en color o solo con pasar del dataPtr alcanza para crear la mono y pasarsela al hayContorno
- int resultado[2];
- calcularPuntoOrigen(marcadoresOcultos[indiceMarcdor].vertex, resultado);
-
- float v0_x = marcadoresOcultos[indiceMarcdor].vertex[resultado[0]][0];
- float v0_y = marcadoresOcultos[indiceMarcdor].vertex[resultado[0]][1];
- float v2_x = marcadoresOcultos[indiceMarcdor].vertex[resultado[1]][0];
- float v2_y = marcadoresOcultos[indiceMarcdor].vertex[resultado[1]][1];
-
- int xStart = 0;
- if(v0_x>OFFSET_ROI){ //Chequeo para no salirme del ancho de la pantalla
- xStart = v0_x - OFFSET_ROI;
- }
-
- int yStart = 0;
- if(v0_y > OFFSET_ROI){ //Chequeo para no salirme del alto de la pantalla
- yStart = v0_y - OFFSET_ROI;
- }
-
- int widthZonaEstudio = abs( v2_x - xStart) + OFFSET_ROI;
- if(xStart + widthZonaEstudio > dataAR.xsize){ //Chequeo para no salirme del ancho de la pantalla
- widthZonaEstudio = dataAR.xsize - xStart;
- }
-
- int heightZonaEstudio = abs(v2_y - yStart) + OFFSET_ROI;
- if(yStart + heightZonaEstudio > dataAR.ysize){ //Chequeo para no salirme del alto de la pantalla
- heightZonaEstudio = dataAR.ysize - yStart;
- }
-
- cvSetImageData( img, (uchar*)(dataPtr), img->width* img->nChannels );
- img->origin = IPL_ORIGIN_TL;
- cvZero(mono_Image); //FIXME Es necesario? Probar sin esto
- float area = -1;
-
- //Calculo el area de la zona de estudio. Segun este area vamos a obtener la cota minima y maxima del area del apuntador esperado segun la calibracion que se hay realizado
- //Por ejemplo si el apuntador ocupa 1/8 del marcador, y el area de la zona de estudio (que es aproximadamente el area del marcador) es de 800, entonces
- //buscaremos un apuntador de (800)*(1/8) = 100 +/- UMBRAL_AREA_APUNTADOR
- int areaZonaEstudio = heightZonaEstudio*widthZonaEstudio;
-
- if(heightZonaEstudio>MIN_AREA_WIDTH_HEIGHT && widthZonaEstudio > MIN_AREA_WIDTH_HEIGHT){ //Ver definicion de MIN_AREA_WIDTH_HEIGHT para comprender mejor este chequeo
- //area = fabs(hayObjetoColor(img,mono_Image,minH,maxH,minS,maxS,minB,maxB,(mostrarImagenDebug)&&(idMarcadorMostrarImagenDebug==indiceMarcdor),xStart,yStart,widthZonaEstudio,heightZonaEstudio,min_area,max_area,ERODE,DILATE,SMOOTH));
- //Esta invocacion a hayObjetoColor esta desactualizada, debe llamarse a la funcion hayApuntador
- area = fabs(hayObjetoColor(img,mono_Image,
- propiedadesCalibracion.resultado_rangos_color.hmin,propiedadesCalibracion.resultado_rangos_color.hmax,
- propiedadesCalibracion.resultado_rangos_color.smin,propiedadesCalibracion.resultado_rangos_color.smax,
- propiedadesCalibracion.resultado_rangos_color.vmin,propiedadesCalibracion.resultado_rangos_color.vmax,
- debugImg,xStart,yStart,widthZonaEstudio,heightZonaEstudio,min_area,areaZonaEstudio/1.5,
- ERODE,DILATE,SMOOTH,1,NULL,NULL));
-
- if(area>0){
- printf("Area zona estudio = %d\n",areaZonaEstudio);
- printf("Area apuntador = %f\n",area);
- /************************************************************************************************************
- * DESCOMENTAR EL SIGUIENTE CODIGO PARA VER LOS SEGMENTOS DE IMAGEN EN LOS CUALES SE DETECTO EL APUNTADOR
- * mostrarTarget(img,xStart,yStart,widthZonaEstudio,heightZonaEstudio);
- * mostrarTarget(mono_Image,xStart,yStart,widthZonaEstudio,heightZonaEstudio);
- * **********************************************************************************************************/
- }
- }
- return area;
-}
-
-
-
-
-
-
-
-
-/* cleanup function called when program exits */
-static void cleanupClicksCV(void)
-{
- arVideoCapStop();
- arVideoClose();
- argCleanup();
- cleanUpSDL();
-}
-
-
-/* main loop de clicksCV*/
-static void mainLoopClicks()
-{
- double err;
- int i;
-
-
- /* grab a video frame */
-printf("Main loop proptotipo!!\n");
- arUtilSleep(90000);
- if( (dataAR.dataPtr = (ARUint8 *)arVideoGetImage()) == NULL ) {
- printf("sleep\n");
- arUtilSleep(2);
- return;
- }
- if( count == 0 ) arUtilTimerReset();
- count++;
-
- if(img==NULL){
- img = crearImagenCv2(dataAR.dataPtr,dataAR.xsize,dataAR.ysize);
- }
-
- /* detect the markers in the video frame */
- if( arDetectMarker(dataAR.dataPtr, dataAR.thresh, &dataAR.marker_info, &dataAR.marker_num) < 0 ) {
- cleanupClicksCV();
- exit(0);
- }
-
-
-
- //argSwapBuffers();
- if(mostrarVideo){
- argDrawMode2D();
- if( !arDebug ) {
- argDispImage( dataAR.dataPtr, 0,0 );
- }
- else {
- argDispImage( dataAR.dataPtr, 1, 1 );
- if( arImageProcMode == AR_IMAGE_PROC_IN_HALF )
- argDispHalfImage( arImage, 0, 0 );
- else
- argDispImage( arImage, 0, 0);
-
- glColor3f( 1.0, 0.0, 0.0 );
- glLineWidth(6.0);
- for( i = 0; i < dataAR.marker_num; i++ ) {
- argDrawSquare( dataAR.marker_info[i].vertex, 0, 0 );
- }
- glLineWidth( 1.0 );
- }
- }
-
- if(mostrarRadar){
- argDrawMode2D();
- argCleanWindow(2,1);
- dibujarLimitesPantalla(dataAR.xsize, dataAR.ysize);
- for( i = 0; i < dataAR.marker_num; i++ ) {
- dibujarMiniMarcador(0,0,dataAR.marker_info[i].vertex,1);
- //printf()
- //argDrawSquare( marker_info[i].vertex, 2, 1 );
- }
- }
- arVideoCapNext();
-
- if( (err=arMultiGetTransMat(dataAR.marker_info, dataAR.marker_num, dataAR.config)) < 0 ) {
- printf("return!\n");
- argSwapBuffers();
- return;
- }
-
- if(err > 100.0 ) {
- printf("saliendo 2\n");
- argSwapBuffers();
- return;
- }
-
- if(mostrarVideo){
- argDrawMode3D();
- argDraw3dCamera( 0, 0 );
- glClearDepth( 1.0 );
- glClear(GL_DEPTH_BUFFER_BIT);
- }
- printf("Marcadores detectados = %d\n",dataAR.marker_num);
-
-
- if(dataAR.marker_num>0){
- for( i = 0; i < dataAR.config->marker_num; i++ ) {
- if( (0)&&(dataAR.config->marker[i].visible >= 0) ){
- draw( dataAR.config->trans, dataAR.config->marker[i].trans, 0 );
- }else {
- //printf("No visible: Width> %f",config->marker[i].width);
- //printf("No visible: Center> (%f,%f)",config->marker[i].center[0],config->marker[i].center[1]);
-
- /*
- * MARCADOR NO DETECTADO.
- * * TENEMOS SUS COORDENADAS
- * - Marker Coordinates (Xm,Ym)
- * - Camera Coordinates (Xc,Yc)
- * * NECESITAMOS SUS COORDENADAS
- * - Ideal Screen Coordinates (xc,yc)
- *
- */
- double hXi_hYi[3][4];
- obtenerCoordenadasIdealesMarcadorNoDetectado(dataAR.config->trans,dataAR.config->marker[i],hXi_hYi,marcadoresOcultos[i].vertex);
-
- double Xi,Yi;
- if(hXi_hYi[2][3]!=0){ //TODO que pasa si h==0?
- marcadoresOcultos[i].centro[0] = hXi_hYi[0][3]/hXi_hYi[2][3];
- marcadoresOcultos[i].centro[1] = hXi_hYi[1][3]/hXi_hYi[2][3];
- }else{
- marcadoresOcultos[i].centro[0] = hXi_hYi[0][3];
- marcadoresOcultos[i].centro[1] = hXi_hYi[1][3];
- }
-
-
- if(mostrarRadar){
- argDrawMode2D();
- dibujarMiniMarcador(0,0,marcadoresOcultos[i].vertex,0);
- }
-
- int area = hayColision(i,dataAR.dataPtr); //Chequea que algun apuntado este colisionando con el marcador i
- if(area>0){
- int cant = registrarColision(i,&historico);
- if(cant>=CANT_HISTORIA){
- correspondenciaCorrecta = 0;
- correspondenciaIncorrecta = 0;
- //printf("es de conjunto A y ")
- if(dataAR.config->marker[i].patt_id == elementoActual){
- correspondenciaCorrecta = true;
- printf("&&&&&&&&&&& COLISION CON MARCADOR %d &&&&&&&&&&&&&&&\n",i);
- actualizarPantalla();
- correspondenciaCorrecta = false;
- }else{
- correspondenciaIncorrecta = false;
- printf("&&&&&&&&&&& COLISION CON MARCADOR %d &&&&&&&&&&&&&&&\n",i);
- actualizarPantalla();
- }
-
- break; // Por ahora cuando se detecta la primera colision ya frenamos
- }else{
- printf("Colision nro %d con marcador %d\n",cant,i);
- }
- }
-
- }
-
- }
- }
-
- argSwapBuffers();
-}
-
-
-void initClicksCV()
-{
-
- //Cargo archivo de configuracion de los elementos a detectar
- cantElementosCargados = leerConfiguracionElementos("prototipo1_SeleccionSimple.config",elementos,MAX_MARCADORES,clickSound,errorSound);
- printf("Se cargaron %d elementos\n",cantElementosCargados);
- imprimirPropiedadesElementos(elementos,cantElementosCargados);
- /* open the video path */
- if(dataAR.xsize<500){
- printf("min_area = %d\n", MIN_AREA/2);
- min_area = MIN_AREA/2;
- }else{
- printf("min_area = %d\n", MIN_AREA);
- min_area = MIN_AREA;
- }
-
- printf("Inicializo data e img\n");
- data1= new uchar[dataAR.xsize* AR_PIX_SIZE_DEFAULT*dataAR.ysize]; // Creo data1 del maximo tamanio que pueda necesitar
- img = crearImagenCv2(data1,dataAR.xsize,dataAR.ysize); // Idem con la imagenCv
- mono_Image =cvCreateImage( cvGetSize(img), 8, 1 );
-
- //Inicializacion de sdl
- if(!initSDL(anchoPantalla,altoPantalla)){
- cleanupClicksCV();
- exit(0);
- }
- CargarFondo("Data/prototipo1/fondoPrototipo1.bmp",1);
-
-
- //Inicializo historial
- initHistorico(&historico,CANT_HISTORIA,-1);
- elementoActual = 0;
- actualizarPantalla();
-
-}
-
-
-
-
-
-
-