Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3320 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  librairie CImg : créer une image à partir d'une matrice

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

librairie CImg : créer une image à partir d'une matrice

n°2235679
rattlesnak​e
Posté le 15-08-2014 à 15:44:40  profilanswer
 

Bonjour,
 
Je travaille sur des fichiers de mesures météorologiques, et dois afficher des images en niveau de gris à partir de fichiers de mesures (chaque mesure correspondant à un pixel). J'y arrive très bien sous Matlab, mais la société chez laquelle je travaille n'en disposant pas, ils souhaitent que je le fasse plutot en c++ pour qu'ils puissent le réexploiter une fois que j'aurais fini mon stage, or je n'ai jamais utilisé du c++ pour la synthèse ou le traitement d'image (bien que je saches programmer avec).
J'ai donc, après quelques recherches, téléchargé la librairie CImg (cimg), permettant d'effectuer du traitement d'image, affichage etc. en c++, seulement je ne m'y connais absolument pas, et j'aimerais être éclairé sur comment traduire une matrice dans un fichier txt en image à niveau de gris avec CImg ou autre si vous avez une autre solution à me proposer !
 
Merci d'avance !

mood
Publicité
Posté le 15-08-2014 à 15:44:40  profilanswer
 

n°2235696
tpierron
Posté le 15-08-2014 à 20:49:59  profilanswer
 

Si tout ce que tu as ce sont des valeurs dans un fichier texte, alors pas besoin de bibliothèque de traitement d'image. Tout ce dont tu as besoin c'est d'une matrice de pixels (tableau à deux dimensions, ou une dimension si tu aimes faire joujou avec l'arithmétique des pointeurs).
 
Une fois en mémoire, tu peux créer un fichier image en utilisant un format trivial du genre pgm (netpbm). Par exemple un fichier niveau de gris 8bits, se déclare :

Code :
  1. P5 <largeur> <hauteur> <maxval>
  2. <matrice de pixels>


"Largeur", "Hauteur" et "maxval" sont des nombres encodés en ASCII sépararé par des blancs. La matrice de pixel est simplement les valeurs binaires des pixels (octet si maxval<256, 2 octets sinon) de tes lignes de l'image, les unes à la suite des autres, sans bourrage. Donc il devrait y avoir largeur * hauteur * octetParPixel octets. Aussi: 0 = noir, maxval = blanc.
 
Tu peux aussi créer une image RGB, avec :

Code :
  1. P6 <largeur> <hauteur> <maxval>
  2. <matrice RGB de pixels = (largeur * hauteur * 3 * sizeof pixel) octets>


 
Après ça, tu pourras éditer l'image avec n'importe quel programme d'édition pas trop pourri (ie: pas MS Paint).

n°2236077
Profil sup​primé
Posté le 24-08-2014 à 23:51:35  answer
 

vous créez 2 topics pour un même probleme, quelqu'un vous répond, vous ignorez cette réponse et vous revenez à la charge quelques jours après avec une nouvelle question. ça donne pas envie de répondre !

n°2237334
rattlesnak​e
Posté le 09-09-2014 à 12:53:51  profilanswer
 

tpierron a écrit :

Si tout ce que tu as ce sont des valeurs dans un fichier texte, alors pas besoin de bibliothèque de traitement d'image. Tout ce dont tu as besoin c'est d'une matrice de pixels (tableau à deux dimensions, ou une dimension si tu aimes faire joujou avec l'arithmétique des pointeurs).
 
Une fois en mémoire, tu peux créer un fichier image en utilisant un format trivial du genre pgm (netpbm). Par exemple un fichier niveau de gris 8bits, se déclare :

Code :
  1. P5 <largeur> <hauteur> <maxval>
  2. <matrice de pixels>


"Largeur", "Hauteur" et "maxval" sont des nombres encodés en ASCII sépararé par des blancs. La matrice de pixel est simplement les valeurs binaires des pixels (octet si maxval<256, 2 octets sinon) de tes lignes de l'image, les unes à la suite des autres, sans bourrage. Donc il devrait y avoir largeur * hauteur * octetParPixel octets. Aussi: 0 = noir, maxval = blanc.
 
Tu peux aussi créer une image RGB, avec :

Code :
  1. P6 <largeur> <hauteur> <maxval>
  2. <matrice RGB de pixels = (largeur * hauteur * 3 * sizeof pixel) octets>


 
Après ça, tu pourras éditer l'image avec n'importe quel programme d'édition pas trop pourri (ie: pas MS Paint).


 
 
Merci pour ta réponse, et désolé pour le retard, j'étais en déplacement, je vais essayer ça !

n°2237335
rattlesnak​e
Posté le 09-09-2014 à 13:01:32  profilanswer
 

 

Des explications? quels topics?


Message édité par rattlesnake le 09-09-2014 à 13:09:22
n°2237563
gilou
Modérateur
Modzilla
Posté le 10-09-2014 à 10:55:40  profilanswer
 

http://forum.hardware.fr/hfr/Progr [...] 2466_1.htm
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2237577
rattlesnak​e
Posté le 10-09-2014 à 12:06:20  profilanswer
 


 
C'est bien bizarre que je sois amené à expliquer cela, mais on va dire que rien n'est évident
 
1 - Ce n'est absolument pas la même chose, il suffit de lire d'abord mais bon... J'avais une alternative proposée pour faire le travail, c'est pourquoi j'ai posté les deux cas de figures
Du coup :
2 - Les deux topics ont été postés quasi simultanément, et pas après avoir obtenu réponse à l'un, là encore il suffit de regarder la date mais bon...
3 - J'étais en déplacement depuis et n'ai pas pu consulter entre temps pour répondre, et ça, ça arrive je pense
 
 
Et merci pour le sang froid et la clairvoyance luc@s   :lol:


Message édité par rattlesnake le 11-09-2014 à 10:51:05
n°2254776
vectra
Bordelais!
Posté le 02-04-2015 à 00:33:17  profilanswer
 

CImg c'est gentil 5 minutes, mais je ne vois pas comment un programmeur peut se passer d'OpenCV.
Je ne pense même pas que des non-français puissent trouver cette option sur Google honnêtement.
 
Tout ce dont vous parlez est très largement décrit dans les exemples de la doc en ligne.
 
Seule exception, cette très très exécrable idée d'utiliser un fichier texte pour stocker des valeurs flottantes  :lol:  
Je reconnais que à part du DICOM ou de l'AIR/Analyze, je ne connais pas de tête des formats de fichier qui stockent des valeurs flottantes, mais ça doit pouvoir se trouver en dehors de ces deux-là, qui ont au moins le mérite de fonctionner déjà (typiquement, pour imagerie médicale).
 
Dans tous les cas, créez des images raw avec 1 pixel = 1 valeur flottante, et ça va correspondre aux images flottantes d'OpenCV que vous pourrez afficher et traiter avec facilité.
Vous pourrez les sauver et les recharger, mais il faudra a priori stocker la taille du fichier quelque part, à moins de trouver un format d'image totalement adapté.
 
Rien de plus facile sinon que de parser un fichier texte à coups de readline et de string tokenizer, même si c'est pas secure. Encore plus facile de faire l'opération inverse.
 
 


Message édité par vectra le 02-04-2015 à 00:45:50

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  librairie CImg : créer une image à partir d'une matrice

 

Sujets relatifs
Chaner le résultat d'une valeur dans array par une imageGénérer un texte à partir de variable
VBA - creer tableau dans wordcréer bannière latérale réseaux sociaux
Ajout d'image MVCInit librairie externe Crash
Problème d'utilisation d'une librairie JS..servlet pour l'affichage d'une image
Phpmyadmin importer imageTrouver le code BIC (swift) à partir d'un RIB ou IBAN
Plus de sujets relatifs à : librairie CImg : créer une image à partir d'une matrice


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR