Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/11/2006, à 22:02

Stephanie

[C]Parcourir une image[Résolu]

Salut,

j'aurais besoin d'aide pour parcourir une image et ainsi récupérer le min et le max de l'image entre les bornes [xmin, ymin, xmax, ymax]

Dernière modification par Stephanie (Le 03/12/2006, à 15:58)

Hors ligne

#2 Le 14/11/2006, à 22:10

abetsic

Re : [C]Parcourir une image[Résolu]

Un truc du genre :

*min=0xFFFFFFFF
for (x=xmin; x<xmax; x++)
{
  for (y=ymin; y<ymax; y++)
  {
    if (image->pixel[i][j] < *min) *min=image->pixel[i][j];
  }
}

(aux erreurs de syntaxe près)

ça ne marche pas ? t'as essayé au moins ? Si tu veux qu'on t'aide il faut que tu  nous dises où ça coince...

Hors ligne

#3 Le 14/11/2006, à 22:37

abetsic

Re : [C]Parcourir une image[Résolu]

... Ca manque de précision...

Qu'est ce qui ne marche pas ?
Quelle est l'erreur ?
Quelle est la bibliothèque utilisée pour ouvrir et parcourir l'image ?
Pourquoi initialises tu min et max avec les valeurs en xmin ? (c'est pas faux, c'est juste que je trouve ça bizarre...)

Comme ça je dirais que l'erreur doit venir de largeur, qui ne correspond pas à la largeur de ton image, mais uniquement à la largeur de la zone que tu regardes.
Ensuite, c'est plutôt j (déplacement vertical) que j'aurai multiplié par largeur et non pas i qui correspond au déplacement horizontal dans l'image.

Hors ligne

#4 Le 14/11/2006, à 23:13

abetsic

Re : [C]Parcourir une image[Résolu]

J'avais fait un parcours d'image en C il y a quelques années, j'utilisais aussi png.h mais je n'avais pas de type t_image... voilà ce que j'ai retrouvé adapté à ton problème

png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
png_bytep *row_pointers = NULL;

/* Allocate/initialize the memory for image information.  REQUIRED. */
info_ptr = png_create_info_struct(png_ptr);

/* Set up the input control if you are using standard C streams */
png_init_io(png_ptr, fp);
png_read_info(png_ptr, info_ptr);

row_pointers = png_malloc(png_ptr, info_ptr->height*sizeof(png_bytep));

png_set_rows(png_ptr, info_ptr, row_pointers);
png_read_image(png_ptr, row_pointers);

for (row = 0; row < info_ptr->height; row++)
{
  for (col = 0; col < info_ptr->width; col++)
  {
    // utilisation de  : row_pointers[row][3*col];
  }
}

Pour toi ça donnerait qqche du genre :

min=0xFFFFFFF // initialisé a qqch de très grand comme ça il prendra des valeurs min successives de l'image
for (y=ymin; y<ymax; y++) // on parcourt les lignes
{
  for (x=xmin; x<xmax; x++) // on parcourt les pixels de chaque ligne
  {
    if (min > image->pixels[y][x*3]) min = image->pixels[y][x*3] // le *3 parce que il y a trois composantes (attention c'est peut être *4 si il y a un canal alpha)
    // mais comme ton tableau pixel a l'air d'être un talbeau à une seule dimension :
    if (min > image-> pixels[y*largeur_totale_de_ton_image+x] bla bla;
    // x est peut être à multiplier par 3 si l'image en mémoire est en trois couleur, si tu l'as ouverte en noir et blanc ce n'est sûrement pas nécessaire. 

  }
}

Je le vois plus comme ça

Dernière modification par abetsic (Le 14/11/2006, à 23:14)

Hors ligne

#5 Le 15/11/2006, à 17:01

Stephanie

Re : [C]Parcourir une image[Résolu]

Ca fonctionne wink
Merci de ton aide

Hors ligne

#6 Le 15/11/2006, à 18:31

abetsic

Re : [C]Parcourir une image[Résolu]

De rien smile

Juste pour savoir où était le problème ?
J'imagine dans l'utilisation du tableau de pixels ? Comment l'as tu adressé ?

Hors ligne