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

librairie CImg : créer une image à partir d'une matrice - C++ - Programmation

Marsh Posté le 15-08-2014 à 15:44:40    

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 !

Reply

Marsh Posté le 15-08-2014 à 15:44:40   

Reply

Marsh Posté le 15-08-2014 à 20:49:59    

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).

Reply

Marsh Posté le 24-08-2014 à 23:51:35    

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 !

Reply

Marsh Posté le 09-09-2014 à 12:53:51    

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 !

Reply

Marsh Posté le 09-09-2014 à 13:01:32    

 

Des explications? quels topics?


Message édité par rattlesnake le 09-09-2014 à 13:09:22
Reply

Marsh Posté le 10-09-2014 à 10:55:40    

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é!  --
Reply

Marsh Posté le 10-09-2014 à 12:06:20    


 
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
Reply

Marsh Posté le 02-04-2015 à 00:33:17    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed