IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Segmentation des mouvements optiques d'un fichier YUV


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut Segmentation des mouvements optiques d'un fichier YUV
    Bonjour à tous,
    je suis nouveau ici et je me permets de vous demandez un peu d'aide j'ai un programme à faire sur un fichier de format YUV. Je dois effectuer ici une lecture du fichier en question en demandant à l'utilisateur de mettre le nombre de pixel lu en largeur et hauteur mais aussi de mettre le nombre d'image sur lequel on va lire le fichier. Je suis penché dessus depuis qq jours mais j'ai une erreur de segmentation. le printf ici sexcute mais juste pour la 1ère image puis ensuite ils disent erreur et le programme ne continue pas.
    Si quelqu'un pourrait m'aider je le remercie d'avance


    Ps: J'ai mis le code en pièce jointes => projetbis.c

    J'ai aussi mis en pièce jointe le code qui compile sans la mise en fonction mais avec des valeurs de videos prédéfinie. => projet_base.c
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(void)
    {
    int nb_long,nb_larg;
    int **tableau;
    ....
    Lecture(tableau,nb_long,nb_larg);
    return 0;
    }
    tableau n'est pas un tableau, mais un pointeur (sur un pointeur sur un int)
    Du coup
    plante en tentant d'écrire dans une zone non allouée.

    Faire la différence :
    un pointeur int * p n'est pas un tableau 1D de int
    un pointeur int** p n'est pas un tableau 2D de int
    Le nombre d'étoiles n'a rien à voir avec la dimension d'un tableau.

    Tu codes en C99 ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut
    Merci pour les conseils, je code sous éclipse. Il fautdrait faire une alloc dynamique avec un malloc?

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Il fautdrait faire une alloc dynamique avec un malloc?
    Si le tableau comporte beaucoup d'éléments : oui
    Si les dimensions du tableau ne sont pas fixées à la compilation mais à l'exécution : oui
    Regarde cette entrée de la FAQ : "Comment allouer dynamiquement un tableau à 2 dimensions ?"

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut
    Merci pour le faq, en fait je dois faire en sorte de prendre 3 paramètre en compte le nombre d'image de la video que je vais apeller a puis le largeur et la hauteur de l'image qui seront i et j cela devrait donc donner un tableau comme ceci tab[a][i*j]. Le faq que j'ai lu il ne prenne en compte que les 2 dimensions du tableau avec 2 valeurs tandis que moi j'en ai 3 donc je ne vois pas trop comment faire :s
    Il y a aussi dans le main le tableau je sais pas comment le déclarer.
    Je vous remercie.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    comme ceci tab[a][i*j].
    ou encore tab[a][i][j] avec un tableau à trois dimensions.
    L'inconvenient d'utiliser un tableau à plusieurs dimensions, est le passage de ce tableau en argument d'une fonction : il faut préciser dans la déclaration du paramètre correspondant les dimensions du tableau (sauf celle la plus à gauche a). Alors la fonction n'est pas utilisable pour les autres valeurs de ces dimensions.

    La méthode de la FAQ construit un tableau à une dimension (de a pointeurs), donc on n'a aucune dimension à préciser lors de la définition du paramètre. Si on a besoin de connaître les dimensions (ce qui est très courant), il suffit de les passer également en paramètres de la fonction. Elle permet en plus, ce qui est loin d'être désagréable, d'utiliser la notation [] pour accéder aux éléments.

    ...tab[a][i*j]. Le faq que j'ai lu il ne prenne en compte que les 2 dimensions du tableau avec 2 valeurs tandis que moi j'en ai 3
    Non, ce tableau est à deux dimensions : (a) et (i*j) et on peut appliquer la méthode de la faq sans modifications.

    Avec un tableau à trois dimensions, tab[a][i][j], la même méthode s'applique en la généralisant un peu :
    - on crée un tableau de a pointeurs int**
    - on initialise chaque pointeur int** en créant un tableau de i pointeurs int*
    - on initialise chaque pointeur int* en créant un tableau de j int

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut
    jte remercie diogène pour tes conseils qui me sont précieux

    Voilà ce que j'ai fait et çà compile en faisant un print pour afficher les valeurs, sinon là dans une deuxième fonction je dois calculer la moyenne de chaque pixel pour mettre ces valeurs dans un autre tableau que j'apelle TF (TabFond). Il faut donc que je réutilise les valeurs du tableau que j'ai fait dans la fonction lecture puis de les diviser par le nombre d'images. Je sais pas trop comment mettre tout çà en paramètre.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include<stdlib.h>
    #include<stdio.h>
     
    int Lecture(int **tab,int h,int i,int j){
    	FILE* fichier = NULL;
    	int a,b,c,d,e,f,g;
    	int pix[i*j];
    	fichier = fopen("//home//richard//projet//foreman.yuv","r");
     
    	if(fichier!=NULL){
     
    		for(a=0;a<h;a++){
    			tab[a] = malloc((i*j)*sizeof(int));
    			for(b=0;b<i;b++){								
    				for(c=0;c<j;c++){							
    					fread(&pix,1,1,fichier);
    					tab[a][b*c]=*pix;
    					//printf("la valeur à l'image %d, pixel: avec longueur=%d et hauteur=%d est: %d \n",a+1,b,c,tab[a][b*c]);
    				}
    			}
    			for(d=0;d<(i/2);d++){
    				for(e=0;e<(j/2);e++){
    					fread(&pix,1,1,fichier);
    				}
    			}
    			for(f=0;f<(i/2);f++){
    				for(g=0;g<(j/2);g++){
    					fread(&pix,1,1,fichier);
    				}
    			}
    		}
    	fclose(fichier);
    	}
    	else{
    		printf("Impossible d'ouvrir le fichier");
    	}
    	return tab[a][b*c];
    }
     
    void MoyennageFond(int *TF,int h, int i,int j){ //Cette fonction permet de faire une valeur moyenne pour chaque pixel de chaque image afin de stocker le tout dans un tableau de fond
    	//Moyennage
    	int k,l,m,som;
    	for(k=0;k<j;k++){
    		for(l=0;l<i;l++){
    			som=0;
    			TF = malloc((i*j)*sizeof(int));
    			for(m=0;m<h;m++){
    				som+=tab[m][k*l];
    			}
    			TF[k*l]=som/m;
    			printf("la valeur moyenne  avec longueur=%d et largeur=%d est: %d \n",k,l,TF[k*l]);
    		}
    	}
    }
     
     
     
    int main(void){
    	int **tableau;
    	int *tabFond;
    	int nb_img,nb_long,nb_larg;
     
    	printf("Sur combien d'images voulez vous travailler? ");
    	scanf("%d",&nb_img);
     
    	printf("Quelle est le nombre de pixel en longueur?");
    	scanf("%d",&nb_long);
     
    	printf("Quelle est le nombre de pixel en largeur?");
    	scanf("%d",&nb_larg);
     
    	tableau = malloc(nb_img*sizeof(int *));
     
    	Lecture(tableau,nb_img,nb_long,nb_larg);
    	tabFond = malloc
     
    	MoyennageFond(tableau,nb_img,nb_long,nb_larg,tabFond);
    	return 0;
    }

Discussions similaires

  1. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05
  2. Extraire des lignes precises d'un fichier
    Par keke33 dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 03/06/2004, 10h52
  3. remplir des tables a partir de fichiers TXT
    Par jeremie dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/03/2004, 14h50
  4. Sauvegarde des attributs de texte en fichier ini
    Par Raylemon dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2003, 21h28
  5. Scanner des mails et récupérer le fichier attaché
    Par delphim dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/04/2003, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo