diff options
author | pgperui <pgperui@65703dd9-322d-4ecd-a169-f49c4620ba53> | 2011-06-07 04:35:18 (GMT) |
---|---|---|
committer | pgperui <pgperui@65703dd9-322d-4ecd-a169-f49c4620ba53> | 2011-06-07 04:35:18 (GMT) |
commit | 1bf95b711899c53024284d359dfc1d43ba171a52 (patch) | |
tree | 5f291813b09d4264995cd5f7a344d55948598dd8 | |
parent | 49ef820a758c7714efc4d5a3a3339863e58470cd (diff) |
git-svn-id: svn+ssh://lulu.fing.edu.uy/ens/home01/pgperui/repoSVN@176 65703dd9-322d-4ecd-a169-f49c4620ba53
-rw-r--r-- | multi/SRC/Calibrador.cpp | 1 | ||||
-rw-r--r-- | multi/SRC/CalibradorColorOO.cpp | 24 | ||||
-rw-r--r-- | multi/SRC/Makefile | 17 | ||||
-rw-r--r-- | multi/SRC/TocarAnimalesPUI.cpp | 117 | ||||
-rw-r--r-- | multi/SRC/clicks.cpp | 1 | ||||
-rw-r--r-- | multi/SRC/clicksCV.cpp | 1 | ||||
-rw-r--r-- | multi/SRC/clicksCVXO.cpp | 1 | ||||
-rw-r--r-- | multi/SRC/clicksCV_SeleccionSimple.cpp | 6 | ||||
-rw-r--r-- | multi/SRC/clicksCV_SeleccionSimpleXO.cpp | 1 | ||||
-rw-r--r-- | multi/SRC/detectarDedal.cpp | 1 |
10 files changed, 67 insertions, 103 deletions
diff --git a/multi/SRC/Calibrador.cpp b/multi/SRC/Calibrador.cpp index b03edae..a8f5744 100644 --- a/multi/SRC/Calibrador.cpp +++ b/multi/SRC/Calibrador.cpp @@ -145,7 +145,6 @@ static int cargarDeFichero(void) { char c; fich=fopen("conf.con","r"); if(fich != NULL) { - fscanf(fich,"%d",&umbral); fscanf(fich," %c",&c); if(c=='#'){ //si el separador es correcto y no es fin de fichero carga valores; fscanf(fich,"%d",&minH); diff --git a/multi/SRC/CalibradorColorOO.cpp b/multi/SRC/CalibradorColorOO.cpp index abf74fe..909688b 100644 --- a/multi/SRC/CalibradorColorOO.cpp +++ b/multi/SRC/CalibradorColorOO.cpp @@ -148,10 +148,14 @@ void mainL(void){ }else if(!jugar){ printf("Ya se tomaron todas las muestras, ahora se procesan los histogramas\n"); pui->calcularResultadosCalibracionApuntador(factorProporcionMaximoH,porcentajeMinimoRuido); - //calcularResultadosCalibracionApuntador(&propiedadesCalibracion,&dataAR,factorProporcionMaximoH,porcentajeMinimoRuido); printf("Resultados:\n"); - desplegarRangosColor(pui->getResultadosRangosColor()); + + printf("Guardo resultados en el archivo Data/calibracionColor.con\n"); + pui->guardarSoloRangosColorApuntador("Data/calibracionColor.con"); + pui->guardarCalibracionApuntador("Data/calibracionApuntadorCompleta.con",300/*area minima*/,1.0/*factor proporcion unico para todos los marcadores*/, + 1/*erode*/,1/*dilate*/,1/*smooth*/,1/*usar enclosing circe*/); + printf("Fin de la calibracion\n"); jugar=1; }else{ //estoy en el juego @@ -166,12 +170,14 @@ int main(int argc, char **argv) printf("InitAR\n"); pui->initARConVideo(config_nameCalibrador,"Data/camera_para.dat",vconf,usarAlgoritmoRapido,pui->NORMAL_SPEED_LOOP,2.0); + printf("Init Rangos Color\n"); initRangosColor(); printf("Init prop calib \n"); pui->initPropiedadesCalibracionSoloApuntador(FORMA_APUNTADOR_CIRCULO,rangosEscalaColor,h_bins,s_bins,v_bins,1); pui->setDebugCalibracion(false); + aplicar_mascara=1; aplicar_nueva_mascara=1; tomar_muestra = 0; @@ -241,7 +247,19 @@ static void keyEvent( unsigned char key, int x, int y) if( key == 'd' ) { mostrarDebugAR = 1 - mostrarDebugAR; pui->desplegarImagenAR(mostrarDebugAR); - //desplegarDataImagen(pui->obtenerImagenDebugAR()); } + if( key == SDLK_1 ) { + pui->setAchicarRadioMascaraCircular( pui->getAchicarRadioMascaraCircular()+3 ); + aplicar_nueva_mascara = 1; + aplicar_mascara = 1; + } + + if( key == SDLK_2 ) { + pui->setAchicarRadioMascaraCircular( pui->getAchicarRadioMascaraCircular()-3 ); + aplicar_nueva_mascara = 1; + aplicar_mascara = 1; + } + + } diff --git a/multi/SRC/Makefile b/multi/SRC/Makefile index 1c46bc0..ae39452 100644 --- a/multi/SRC/Makefile +++ b/multi/SRC/Makefile @@ -22,7 +22,7 @@ CFLAG= $(CFLAG_DEBUG) OBJS = HEADDERS = -all: $(BIN_DIR)/CalibradorColor $(BIN_DIR)/CalibradorColorOO $(BIN_DIR)/Prueba $(BIN_DIR)/Renata $(BIN_DIR)/RenataXO $(BIN_DIR)/clicksCV_SeleccionSimpleXO $(BIN_DIR)/multiTest $(BIN_DIR)/multiTestPerformance $(BIN_DIR)/detectarDedal $(BIN_DIR)/clicks $(BIN_DIR)/clicksCV $(BIN_DIR)/clicksCVXO $(BIN_DIR)/Calibrador $(BIN_DIR)/CalibradorAR $(BIN_DIR)/clicksCV_SeleccionSimple $(BIN_DIR)/pruebaPerformanceRGB2HSV +all: $(BIN_DIR)/CalibradorColor $(BIN_DIR)/CalibradorColorOO $(BIN_DIR)/TocarAnimalesPUI $(BIN_DIR)/Prueba $(BIN_DIR)/Renata $(BIN_DIR)/RenataXO $(BIN_DIR)/clicksCV_SeleccionSimpleXO $(BIN_DIR)/multiTest $(BIN_DIR)/multiTestPerformance $(BIN_DIR)/detectarDedal $(BIN_DIR)/clicks $(BIN_DIR)/clicksCV $(BIN_DIR)/clicksCVXO $(BIN_DIR)/Calibrador $(BIN_DIR)/CalibradorAR $(BIN_DIR)/clicksCV_SeleccionSimple $(BIN_DIR)/pruebaPerformanceRGB2HSV $(BIN_DIR)/pruebaPerformanceRGB2HSV: pruebaPerformanceRGB2HSV.o g++ -o $(BIN_DIR)/pruebaPerformanceRGB2HSV $(LIB_DIR_UTIL)/Utilidades.o $(LIB_DIR_UTIL)/Funciones.o $(LIB_DIR_UTIL)/UtilidadesSDL.o $(LIB_DIR_UTIL)/cvUtilities.o pruebaPerformanceRGB2HSV.o $(OBJS) $(LDFLAG) $(LIBS) @@ -66,6 +66,9 @@ $(BIN_DIR)/CalibradorColor: CalibradorColor.o $(BIN_DIR)/CalibradorColorOO: CalibradorColorOO.o g++ -o $(BIN_DIR)/CalibradorColorOO $(LIB_DIR_UTIL)/cvUtilities.o $(LIB_DIR_UTIL)/Funciones.o $(LIB_DIR_UTIL)/Pui.o CalibradorColorOO.o $(OBJS) $(LDFLAG) $(LIBS) +$(BIN_DIR)/TocarAnimalesPUI: TocarAnimalesPUI.o + g++ -o $(BIN_DIR)/TocarAnimalesPUI $(LIB_DIR_UTIL)/cvUtilities.o $(LIB_DIR_UTIL)/Funciones.o $(LIB_DIR_UTIL)/UtilidadesSDL.o $(LIB_DIR_UTIL)/Pui.o TocarAnimalesPUI.o $(OBJS) $(LDFLAG) $(LIBS) + $(BIN_DIR)/Prueba: Prueba.o g++ -o $(BIN_DIR)/Prueba $(LIB_DIR_UTIL)/cvUtilities.o $(LIB_DIR_UTIL)/Funciones.o $(LIB_DIR_UTIL)/Pui.o Prueba.o $(OBJS) $(LDFLAG) $(LIBS) @@ -99,6 +102,9 @@ CalibradorColor.o: CalibradorColor.cpp CalibradorColorOO.o: CalibradorColorOO.cpp g++ -c $(CFLAG) CalibradorColorOO.cpp +TocarAnimalesPUI.o: TocarAnimalesPUI.cpp + g++ -c $(CFLAG) TocarAnimalesPUI.cpp + Prueba.o: Prueba.cpp g++ -c $(CFLAG) Prueba.cpp @@ -135,9 +141,18 @@ clean: rm -f $(BIN_DIR)/clicks rm -f $(BIN_DIR)/clicksCV rm -f $(BIN_DIR)/clicksCVXO + rm -f $(BIN_DIR)/CalibradorColorOO + rm -f $(BIN_DIR)/CalibradorColor + rm -f $(BIN_DIR)/TocarAnimalesPui + allclean: rm -f *.o rm -f $(BIN_DIR)/multiTest rm -f $(BIN_DIR)/detectarDedal rm -f $(BIN_DIR)/clicks + rm -f $(BIN_DIR)/clicksCV + rm -f $(BIN_DIR)/clicksCVXO + rm -f $(BIN_DIR)/CalibradorColorOO + rm -f $(BIN_DIR)/CalibradorColor + rm -f $(BIN_DIR)/TocarAnimalesPui diff --git a/multi/SRC/TocarAnimalesPUI.cpp b/multi/SRC/TocarAnimalesPUI.cpp index af85b76..a3e28c2 100644 --- a/multi/SRC/TocarAnimalesPUI.cpp +++ b/multi/SRC/TocarAnimalesPUI.cpp @@ -7,7 +7,6 @@ #include <AR/gsub.h> #include <GL/gl.h> #include <GL/glut.h> - /************************************************************************************************************************* * CONFIGURACIONES GENERALES DE LA APLICACION *************************************************************************************************************************/ @@ -18,51 +17,23 @@ int mostrarRadar = 1; /************************************************************************************************************************* * CONFIGURACION DE RECONOCIMIENTO DE COLORES *************************************************************************************************************************/ -#define MIN_AREA 500 -//#define MAX_AREA 1500 - -int min_area = MIN_AREA; -//int max_area = MAX_AREA; -float factor =1; -#define MIN_H 0 -#define MAX_H 0 -#define MIN_S 0 -#define MAX_S 0 -#define MIN_B 0 -#define MAX_B 0 + #define CANT_HISTORIA 4 -#define UMBRAL 5 -#define UMBRAL_AREA_APUNTADOR 20 //El area del apuntador y el area del marcador tienen una relacion definida mediante calibracion. Usamos un - //umbral de error al que declaramos como UMBRAL_AREA_APUNTADOR. Es decir si la zona de estudio donde buscamos el - //apuntador mide 300 y la relacion es de 1/2 (el apuntador mide la mitad del marcador) entonces buscaremos apuntadores entre - //las cotas (150 - UMBRAL_AREA_APUNTADOR) y (150 - UMBRAL_AREA_APUNTADOR) -#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 - -int umbral = UMBRAL; -int minH = MIN_H, maxH = MAX_H, minS = MIN_S, maxS = MAX_S, minB = MIN_B,maxB = MAX_B; -int num_apuntadores =0; + int mostrarImagenDebug = 0; 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 -int idMarcadorMostrarImagenDebug = -1; + +int usarAlgoritmoRapido =1; /******************************************************************************************************************************** * CONFIGURACION DE ARTOOLKIT Y MARCADORES ********************************************************************************************************************************/ #define MAX_MARCADORES 30 -/* set up the video format globals */ -#ifdef _WIN32 -char *vconf = "Data\\WDM_camera_flipV.xml"; -#else +/* no se define el pipeline aqui, se usa la variable de ambiente ARTOOLKIT_CONFIG*/ char *vconf = ""; -#endif + int xsize, ysize; int thresh = 100; @@ -74,15 +45,6 @@ ARParam cparam; char *config_name = "Data/prototipo1/prototipo1.dat"; ARMultiMarkerInfoT *config; - -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. - - Pui* pui; /************************************************************************************************************************************** @@ -95,8 +57,6 @@ typedef struct { int idImagenSDL; }ElementoEnPantalla; - - /* Representacion de los elementosEnPantalla*/ ElementoEnPantalla elementosEnPantalla[MAX_MARCADORES]; //El indice el elemento coincide con el id del elemento que tambien coincide con el id del marcador artoolkit int cantElementosCargados = 0; @@ -121,11 +81,6 @@ int altoPantalla = 700; //Son los id de las imagenes actualmente desplegadas en la pantalla int idSDLImagenPantalla = -1; -int mostrarDebugAR = 0; -#define CONJUNTO_A 0 -#define CONJUNTO_B 1 - - /*************************************************************************************************************************************** * DECALRACIONES DE FUNCIONES AUXILIARES @@ -136,15 +91,11 @@ static void keyEvent( unsigned char key, int x, int y); static void mainLoop(void); static void draw(); -int main(int argc, char **argv) -{ +int main(int argc, char **argv){ pui = new Pui(); printf("InitAR\n"); - pui->initPuiConCapturaDeVideo("pui.config",config_nameCalibrador,"Data/camera_para.dat",vconf,usarAlgoritmoRapido,pui->NORMAL_SPEED_LOOP,2.0); - pui->abrirVentanaGrafica(); - pui->capStart(); - init(); + init(); printf("main loop\n"); argMainLoop( NULL, keyEvent, mainLoop ); printf("---------------------"); @@ -153,7 +104,7 @@ int main(int argc, char **argv) void proximoElemento(){ - if(idObjetoPUIActual == cantElementosCargados -1){//TODO Vuelve a comenzar o mensaje de exito y finaliza?? + if(idObjetoPUIActual == cantElementosCargados -1){ idObjetoPUIActual = 0; }else{ idObjetoPUIActual++; @@ -169,7 +120,7 @@ void actualizarPantalla(){ OcultarImage(idSDLImagenPantalla,0); } if( (elementosEnPantalla[idObjetoPUIActual].idImagenSDL == -1) ){ //Todavia no se cargo la imagen para este elemento - printf("voy a desplegar la imagen: %s\n",elementosEnPantalla[idObjetoPUIActual].imagen); + printf("voy a desplegar la imagen: %s\n",pui->getImagenObjetoPUI(idObjetoPUIActual)); elementosEnPantalla[idObjetoPUIActual].idImagenSDL = PlayImageConTitulo(pui->getImagenObjetoPUI(idObjetoPUIActual),pui->getNombreObjetoPUI(idObjetoPUIActual),xImagen,yImagen,0); idSDLImagenPantalla = elementosEnPantalla[idObjetoPUIActual].idImagenSDL; //Actualizo el id de la imagen mostrada actualmente printf("IdSDLA = %d\n",idSDLImagenPantalla); @@ -181,10 +132,10 @@ void actualizarPantalla(){ 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(elementosEnPantalla[idObjetoPUIActual].nombreRelacion,xNombreRelacion,yNombreRelacion,0); - PlaySound(elementosEnPantalla[idObjetoPUIActual].sonido); + EscribirTexto(pui->getNombreRelacionObjetoPUI(idObjetoPUIActual),xNombreRelacion,yNombreRelacion,0); + PlaySound(pui->getSonidoObjetoPUI(idObjetoPUIActual)); }else if(correspondenciaIncorrecta){ - PlaySound(errorSound); + PlaySound(pui->getSonidoError()); } }else{ @@ -214,23 +165,6 @@ static void keyEvent( unsigned char key, int x, int y) } } - if( key == 'm' ) { - mostrarImagenDebug= 1 - mostrarImagenDebug; - } - - if(key == 'i'){ - printf("Ingrese marcador para debug (actual %d): ",idMarcadorMostrarImagenDebug); - scanf("%d",&idMarcadorMostrarImagenDebug); while( getchar()!='\n' ); - printf("\n"); - } - - if( key == 'c' ) { - dibujarCubos = 1 - dibujarCubos; - if(!dibujarCubos){ - argCleanWindow(0,0); - } - } - if( key == 'r' ) { printf("Mostrar Radar\n"); mostrarRadar = 1 - mostrarRadar; @@ -260,8 +194,8 @@ static void keyEvent( unsigned char key, int x, int y) /* turn on and off the debug mode with right mouse */ if( key == 'd' ) { printf("*** %f (frame/sec)\n", (double)count/arUtilTimer()); - mostrarDebugAR = 1 - mostrarDebugAR; - pui->desplegarImagenAR(mostrarDebugAR); + mostrarImagenDebug = 1 - mostrarImagenDebug; + pui->desplegarImagenAR(mostrarImagenDebug); } if( key == '+' ) { @@ -281,7 +215,6 @@ static void keyEvent( unsigned char key, int x, int y) /* main loop */ static void mainLoop(void) { - ARUint8 *dataPtr; int err_deteccion; /* VIEJO1 @@ -300,7 +233,7 @@ static void mainLoop(void) */ /***** NUEVO 1 *****/ - if(dataPtr=pui->capturarImagenAR()==NULL){ + if(!pui->capturarImagenAR()){ return; }else{ @@ -451,7 +384,7 @@ static void mainLoop(void) /* NUEVO 3*/ if(err_deteccion!=ERROR_IMAGEN_NULL){ - pui->desplegarImagenAR(false); + pui->desplegarImagenAR(mostrarImagenDebug); } } @@ -472,15 +405,21 @@ static void mainLoop(void) } -static void init( void ) -{ +static void init( void ){ + pui->initPuiConCapturaDeVideo("pui.config",config_name,"Data/camera_para.dat",vconf,usarAlgoritmoRapido,pui->NORMAL_SPEED_LOOP,2.0); + pui->abrirVentanaGrafica(); + pui->capStart(); - //Cargo archivo de configuracion de los elementosEnPantalla a detectar - // cantElementosCargados = leerConfiguracionElementos("prototipo1_SeleccionSimple.config",elementosEnPantalla,MAX_MARCADORES,clickSound,errorSound); cantElementosCargados = pui->leerConfiguracionObjetosPUI("prototipo1_SeleccionSimple.config",MAX_MARCADORES); printf("Se cargaron %d elementos\n",cantElementosCargados); + + //Inicializo los id de las imagenes en pantalla en -1 + for(int i=0;i<cantElementosCargados;i++){ + elementosEnPantalla[i].idImagenSDL=-1; + } pui->imprimirPropiedadesObjetosPUI(); + //Inicializacion de sdl if(!initSDL(anchoPantalla,altoPantalla)){ cleanup(); @@ -488,13 +427,11 @@ static void init( void ) } CargarFondo("Data/prototipo1/fondoPrototipo1.bmp",1); - //Inicializo historial pui->habilitarHistorico(true,CANT_HISTORIA,-1); idObjetoPUIActual = 0; actualizarPantalla(); - } /* cleanup function called when program exits */ diff --git a/multi/SRC/clicks.cpp b/multi/SRC/clicks.cpp index d4287f2..6df13ee 100644 --- a/multi/SRC/clicks.cpp +++ b/multi/SRC/clicks.cpp @@ -96,7 +96,6 @@ static int cargarDeFichero(void) { char c; fich=fopen("conf.con","r"); if(fich != NULL) { - fscanf(fich,"%d",&umbral); fscanf(fich," %c",&c); if(c=='#'){ //si el separador es correcto y no es fin de fichero carga valores; fscanf(fich,"%d",&minH); diff --git a/multi/SRC/clicksCV.cpp b/multi/SRC/clicksCV.cpp index 9c9cd85..97c3fda 100644 --- a/multi/SRC/clicksCV.cpp +++ b/multi/SRC/clicksCV.cpp @@ -179,7 +179,6 @@ static int cargarDeFichero(void) { char c; fich=fopen("conf.con","r"); if(fich != NULL) { - fscanf(fich,"%d",&umbral); fscanf(fich," %c",&c); if(c=='#'){ //si el separador es correcto y no es fin de fichero carga valores; fscanf(fich,"%d",&minH); diff --git a/multi/SRC/clicksCVXO.cpp b/multi/SRC/clicksCVXO.cpp index 3affafb..5a2386c 100644 --- a/multi/SRC/clicksCVXO.cpp +++ b/multi/SRC/clicksCVXO.cpp @@ -178,7 +178,6 @@ static int cargarDeFichero(void) { char c; fich=fopen("DataXO/conf.con","r"); if(fich != NULL) { - fscanf(fich,"%d",&umbral); fscanf(fich," %c",&c); if(c=='#'){ //si el separador es correcto y no es fin de fichero carga valores; fscanf(fich,"%d",&minH); diff --git a/multi/SRC/clicksCV_SeleccionSimple.cpp b/multi/SRC/clicksCV_SeleccionSimple.cpp index 223c61e..d8b01cf 100644 --- a/multi/SRC/clicksCV_SeleccionSimple.cpp +++ b/multi/SRC/clicksCV_SeleccionSimple.cpp @@ -100,7 +100,7 @@ int count = 0; char *cparam_name = "Data/camera_para.dat"; ARParam cparam; -char *config_name = "Data/prototipo1_SeleccionSimple/mezclados2.dat";///*config_name = "Data/prototipo1/prototipo1.dat"; // +char *config_name = "Data/prototipo1/prototipo1.dat"; //*config_name = "Data/prototipo1_SeleccionSimple/mezclados2.dat"; ARMultiMarkerInfoT *config; @@ -178,9 +178,9 @@ int main(int argc, char **argv) static int cargarDeFichero(void) { FILE *fich; char c; - fich=fopen("conf.con","r"); + //fich=fopen("conf.con","r"); + fich=fopen("Data/calibracionColor.con","r"); if(fich != NULL) { - fscanf(fich,"%d",&umbral); fscanf(fich," %c",&c); if(c=='#'){ //si el separador es correcto y no es fin de fichero carga valores; fscanf(fich,"%d",&minH); diff --git a/multi/SRC/clicksCV_SeleccionSimpleXO.cpp b/multi/SRC/clicksCV_SeleccionSimpleXO.cpp index 5b3b371..ee5cf37 100644 --- a/multi/SRC/clicksCV_SeleccionSimpleXO.cpp +++ b/multi/SRC/clicksCV_SeleccionSimpleXO.cpp @@ -178,7 +178,6 @@ static int cargarDeFichero(void) { char c; fich=fopen("confXO.con","r"); if(fich != NULL) { - fscanf(fich,"%d",&umbral); fscanf(fich," %c",&c); if(c=='#'){ //si el separador es correcto y no es fin de fichero carga valores; fscanf(fich,"%d",&minH); diff --git a/multi/SRC/detectarDedal.cpp b/multi/SRC/detectarDedal.cpp index 3c01946..6678a6b 100644 --- a/multi/SRC/detectarDedal.cpp +++ b/multi/SRC/detectarDedal.cpp @@ -87,7 +87,6 @@ static int cargarDeFichero(void) { char c; fich=fopen("conf.con","r"); if(fich != NULL) { - fscanf(fich,"%d",&umbral); fscanf(fich," %c",&c); if(c=='#'){ //si el separador es correcto y no es fin de fichero carga valores; fscanf(fich,"%d",&minH); |