Redimmensionner une image - C - Programmation
Marsh Posté le 09-03-2011 à 14:43:41
Je vois pas de difficulté majeure...transformer du 128x128 en 512x512 ça revient tout simplement à créer un carré de 4x4 pixels pour chaque pixel de l'image d'origine...
Marsh Posté le 09-03-2011 à 14:45:27
Oui je comprend bien mais tu aurait un bout de code a me montrer poue effectuer cette opération s'il te plais
Merci d'avance
Marsh Posté le 09-03-2011 à 14:49:12
Non.
Le principe sur ce forum c'est plutôt de commencer à faire quelque chose, et de demander de l'aide quand on est bloqué...tu en es où? Tu as du code à montrer?
Marsh Posté le 09-03-2011 à 15:13:42
Code :
|
Voila mon code sauf que pour le moment j'effectue un filtrage sur une image (ici une image dicom) je compte suprimé ce bout de code et à la place arriver a redimensionner mon image
dans ce code : a partir de la console j'insere une image dicom avec ça taille et il me recrée un fichier "filtré"
Marsh Posté le 09-03-2011 à 15:21:00
...tu as donc une bonne base pour ce nouvel exercice...qu'est-ce qui te pose problème?
Marsh Posté le 09-03-2011 à 15:25:00
Eh bien j'aimerais avoir le code qui me permette de redimensionner mon image à la place du code de filtrage .
Je ne c'est pas du tout comme faire pour redimensionner mon image !
meme si j'ai compris le principe .
Marsh Posté le 09-03-2011 à 15:36:22
Tu ouvres ton image d'origine, tu en crées une nouvelle en 512x512, et tu copies les pixels de ton image d'origine au bon endroit dans la nouvelle.
Il n'y a aucune réelle difficulté à-partir du code que tu as déjà, si tu l'as compris.
Marsh Posté le 09-03-2011 à 17:34:00
Mais pourrait me montrer les directives du code a appliquer si ce n'est pas trop compliqué
Je t'en remercie d'avance
Marsh Posté le 09-03-2011 à 17:47:31
yoyo30 a écrit : Mais pourrait me montrer les directives du code a appliquer si ce n'est pas trop compliqué |
1. tu crées une image vide de 512x512 (c'est à toi de savoir comment créer une image vide... c'est ton code, tes lib)
2. tu parcours ton image vide pixel par pixel (c'est à toi de savoir comment on parcourt une image)
3. pour chaque pixel de l'image vide (d'arrivée) tu vas lire une valeur dans l'image d'origine (c'est à toi de savoir comment on lit la valeur d'un pixel dans une image) et tu la copies dans ton image d'arrivée (c'est à toi de savoir comment on écrit une valeur dans une image)
Une fois le parcours fini, tu as une image de 512x512 non vide. Tu as terminé ton redimensionnement.
Pour les directives de code, débrouille toi.
Marsh Posté le 09-03-2011 à 18:12:19
Il serait peut être plus simple de procéder ainsi:
1. tu crées une image vide de 512x512 (c'est à toi de savoir comment créer une image vide... c'est ton code, tes lib)
2 Tu parcours ton image source de 128*128
- Pour chaque ligne de l'image source, tu la parcours pixel par pixel
- Pour chaque pixel de la ligne, tu l'écris 4 fois dans l'image d'arrivée.
Une fois la ligne de l'image source lue, et une ligne de l'image d'arrivée écrite, on copie 3 fois cette ligne de l'image d'arrivée dans l'image d'arrivée (ca nous fait donc 4 lignes de l'image d'arrivée au total)
Et on reboucle tant qu'il reste des lignes dans l'image source.
A+,
Marsh Posté le 09-03-2011 à 18:30:41
Ok merci juste une question on fait comment pour crée une image vide ?
Marsh Posté le 09-03-2011 à 20:11:40
Ben tu alloues une taille mémoire ad-hoc, et tu remplis les champs a renseigner qui dépendent de ton format d'image .
A+,
Marsh Posté le 10-03-2011 à 12:01:52
Voila ce que j'ai commencé a faire
Code :
|
Marsh Posté le 10-03-2011 à 13:37:28
Bien sur, puisque la tu lis l'image d'un coup au lieu de la lire pixel par pixel, et tenir compte du fait que tu as des lignes de 128 pixels..
A+,
Marsh Posté le 10-03-2011 à 14:00:39
Et quel fonction je doit utiliser pour lire pixel par pixel ?
Marsh Posté le 10-03-2011 à 14:02:27
Il suffit de te sortir les doigts du cul et essayer de comprendre ce que tu fais / ce que ton premier code fait. Tu n'en as visiblement pas la moindre idée.
Marsh Posté le 10-03-2011 à 14:10:15
" Il suffit de te sortir les doigts du cul ! "
je vais essayer ! je vais essayer de comprendre ce code !!!
je reviendrait qd je me serais ....
merci
Marsh Posté le 10-03-2011 à 15:26:57
Ben oui, parce que soit tu comprends ce que fait la ligne
fread(dicom-entete,taille,sizeof(short int),fichier);
et donc ça devrait pas te poser de problème d'adapter avec une boucle pour lire pixel par pixel
soit c'est recopié d'un autre programme en changeant les noms de variable
et que ça marche sans que tu comprennes comment ça marche
et la on ne peut rien pour toi, puisqu'ici, on ne donne pas dans la programmation vaudou.
A+,
Marsh Posté le 10-03-2011 à 17:39:42
je comprend ce que fait cette ligne puisque je les écrite
elle permet de lire après l'entête mais le probléme qui doit ce poser c'est que je doit (je pense) remplacer un bout du code pour lui dire de lire pixel par pixel
Marsh Posté le 10-03-2011 à 18:08:32
Ben si tu comprends cette ligne, qui lit 16384 pixels d'un coup, tu devrais savoir comment faire pour en lire un seul d'un coup.
A+,
Marsh Posté le 10-03-2011 à 21:08:49
ReplyMarsh Posté le 11-03-2011 à 01:28:43
yoyo30 a écrit : Disons que c'est plus simple de les lire tous que un par un je pense |
oui mais on te dit depuis le début que tu dois pixel par pixel pour pouvoir quadrupler ton image.
Marsh Posté le 11-03-2011 à 02:23:01
yoyo30 a écrit : Disons que c'est plus simple de les lire tous que un par un je pense |
Non, c'est pareil, il y a juste que la quantité de pixels lus qui change.
A+,
Marsh Posté le 11-03-2011 à 11:31:31
j'ai rajouté ce code
Code :
|
mais ça marche pas !
Marsh Posté le 11-03-2011 à 11:59:36
Bah c'est en bonne voie en tout cas.
Essaie de décrire le problème de manière concise :
- si ça ne compile pas : que dit le compilateur ?
- si ça compile :
-- est-ce que le programme va jusqu'au bout ou est-ce que ça crash avant la fin ?
-- tu as mis quoi en entrée, tu as obtenu quoi en sortie ?
On peut pas t'aider si tu dis juste "ça marche pas"
Marsh Posté le 11-03-2011 à 13:05:13
en faite ça compile mais il me prend l'image d'entrer et il me crée une image de sortie identique à l'image d'entrée !
Marsh Posté le 11-03-2011 à 14:07:54
Si tu mets un point d'arrêt (il te faut un débugger pour ça) ou un printf au cœur de tes boucles for, tu passes bien dans ton nouveau bout de code ou pas ?
Sinon aucun rapport, mais je mets une version sans tes commentaires ici (plus facile pour nous à lire)
Code :
|
Ça compile plutôt pas mal.
|
Marsh Posté le 11-03-2011 à 14:31:49
Enfaite a ce code j'ai effacé ce qui concerné le filtrage et a la fin a la place de la ligne 120 à 124 j'ai mis mon bout de code
short *ligne_en_sortie = (short *)malloc(4*cote*sizeof(short));
/* je passe les déclarations de compteurs évidentes ! */
...
for (l=0;l<cote;l++)
{
/* decalage buffer entree pour ligne courante */
int offset_entree = entete + l * cote;
for (c=0;c<cote;c++)
for (i=0;i<4;i++)
ligne_en_sortie[c*4+i] = dicom[offset_entree+c];
for (i=0;i<4;i++)
fwrite(ligne_en_sortie,4*cote,sizeof(short),fpout);
}
Marsh Posté le 14-03-2011 à 10:59:20
Arrête de remonter ce topic sans infos supplémentaires, merci. C'est pénible.
En survolant ton code, on dirait que tu modifies une image mais que tu enregistres la mauvaise:
Code :
|
Marsh Posté le 14-03-2011 à 11:17:29
Ok
mais j'ai apporté de nouveau éléments !
le Poste du 11-03-2011 à 14:31:49
Marsh Posté le 14-03-2011 à 12:49:00
Oui, mais il se passe quoi depuis?
A+,
Marsh Posté le 14-03-2011 à 13:40:17
eh bien je code que j'ai posté sert a fair le zoom *4 mais quand je compile je retrouve mon image d'origine non modifié !!!
Marsh Posté le 14-03-2011 à 13:45:36
Tu pourrais reposter ton code, qu'on s'y retrouve, car le bout que tu avais modifié semblait correct.
A+,
Marsh Posté le 09-03-2011 à 14:11:08
Bonjour a tous !
j'ai besoin d'une aide pour cette question comme toujours je travaille en C sous devc++ sans bibliothéque
je posséde une image de taille 512*512(CT) et une autre 128*128(TEP)
Il me faut fusionner ces images mais avant cela il me faut arriver a dimensionner l'image 128*128(TEP) en 512*512 pour que la fusion ce fasse parfaitement
je compte alors faire un programme qui suivent ces parametres :
Fusion(i,j)(512*512)
CT(512) (i1,j1)->(i1=i,j1=j)
TEP(128) (i2,j2)->(i2=i/4,j2=j/4)
Quel sont les fonctions a utilisé,comment arriver a retranscrire ces paramétres en langage C ?
Merci d'avance