Traitement d'image pour robot suiveur de lign

Fermé
Alioth - 9 mars 2010 à 16:57
Bonjour,

Je réalise une fonction de traitement d'image pour un robot suiveur de ligne. J'ai repris le travail commencé par un autre que j'ai modifier et complété mais je me rend compte après plusieurs testes qu'il y a un problème qui viendrais d'après moi du remplissage de la matrice stockant l'image. Cette image est une image blanche avec une ligne noir de 320*240 en bmp 256 couleurs. Ce qui me pose problème c'est l'utilisation de la fonction fgetc dont le fonctionnement avec une image n'est pas très clair.

Voici le code, j'espère que vous m'aidez:


// lectbmp.cpp : définit le point d'entrée pour l'application console.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


int** traitement_image(char *nom_du_fichier)
{
    int index,indice1,indice2,indice3 ;
    FILE *fichier;
    fichier = fopen(nom_du_fichier,"r");
    if(fichier == 0 )
    {
        printf("probleme  ouverture fichier");
        exit(0);
    }
    // Abandon des 18 premier octet inutile a la lecture

    for (index = 0; index < 18; index++)
        indice1=fgetc(fichier);

 

   /*initialisation de la matrice*/
    int tab[320][240];
    int i = 0;
    for(indice1 = 0;  indice1 < 320; indice1++)
    {
    	for(indice2 = 0; indice2 < 240; indice2++)
		{
			tab[indice1][indice2] = 0;
		}
    }
    //tableau deux dimension initialisé
    for(index;index <55 ;index++)
        fgetc(fichier);
    /*il y a une palette qui fait 1024 octet a sauter car 256 couleurs*/
    for(index;index <1024 +54;index++)
        fgetc(fichier);
    /*remplissage de notre matrice*/
    for(indice1 = 0 ;  indice1 < 320; indice1++)
        {
            for(indice2 = 0; indice2 < 240; indice2++)
                tab[indice2][indice1] = fgetc(fichier);
        }

    fclose(fichier);

    /* pour calculé la direction du robot,
    je fait le calcule en utilisant qu'une ligne
    mais on peu le faire avec plus*/

    int nbnoir0=0;
    int nbnoir1=0;
    int nbnoir2=0;
	
	/*Pour aller tout droit*/
	for(indice1 = 106 ; indice1 < 213 ;indice1++)
	{
		if(tab[indice1][12]==0x00)
            	{
			nbnoir0++;
		}
	}
		if(nbnoir0 > 15 ) //nombre de pixel noir sur la ligne à partir du quel le robot doit aller tout droit
        {
			printf("le robot va tout droit\n\n");
			printf("nbnoir0 = %d\n\n",nbnoir0);
		}
		else
		{	
			/*Pour aller à droite ou à gauche*/
			printf("nbnoir0 = %d indice1 = %d \n\n",nbnoir0, indice1);
			for(indice1 = 0 ; indice1 < 160 ; indice1++)
			{
				if(tab[indice1][0]==0x00)
				{
					nbnoir1++;
				}
			}
			for(indice1 = 160;indice1 < 320; indice1++)
			{
				if(tab[indice1][0]==0x00)
				{
					nbnoir2++;
				}
			}
			if(nbnoir1<nbnoir2)
			{
				printf("le robot doit aller a droite %d - %d\n\n",nbnoir1,nbnoir2);
			}
			if(nbnoir1>nbnoir2)
			{
				printf("le robot doit aller a gauche %d - %d\n\n",nbnoir1,nbnoir2);
			}
			//test en cas d'erreur
			if(nbnoir1 == nbnoir2)
			{
				printf("erreur %d - %d\n",nbnoir1,nbnoir2);
			}
			
		}
	
	/*
	//Teste de la matrice
	for(indice2 = 0 ; indice2 < 320;indice2++)
        {
            for(indice3 = 0 ; indice3< 240;indice3++)
                {
                    printf ("| %x ",tab[indice3][indice2]);
                }
            printf("|\n");
        }*/
    return 0;
}





int _tmain(int argc, _TCHAR* argv[])
{
	

   while(1)
   {
    system("cls");
    char *nom_du_fichier;
    nom_du_fichier = (char *) malloc(9 * sizeof(char));
    printf("nom du fichier a ouvrir \n");
    scanf("%s",nom_du_fichier);
    
    traitement_image(nom_du_fichier);

	
    printf("Appuyer sur une touche pour recommencer \n");


  		getch();
    } ;
    return 0;
}