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

  FORUM HardWare.fr
  Programmation
  C++

  lire une image pgm

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lire une image pgm

n°427173
GustyFotz
Posté le 13-06-2003 à 21:02:58  profilanswer
 

Salut tout le monde, j'ai besoin d'un p'tit coup de pouce.
Je cherche à écrire un source qui lit une image pgm (format : 240 col x 640 lign, 255 niv de gris) et écris chaque pixel dans un tableau de la même taille. Le tableau contient alors 240 x 640 octets.
Qqn pourrait-il m'aider svp ??
 
Celui qui me permet de me décoincer de mon problème, je lui raconte la blague des deux mouches...
 
Merci.
 

mood
Publicité
Posté le 13-06-2003 à 21:02:58  profilanswer
 

n°427186
Joel F
Real men use unique_ptr
Posté le 13-06-2003 à 21:55:21  profilanswer
 

Sinon google est pas down ??? hmm
le pgm c trivial surout en format ascii alors bon ...
bouge ton luc :P

n°427187
SquiZZ
Posté le 13-06-2003 à 21:55:30  profilanswer
 

une petite recherche avec google permet de trouver des trucs épatants : 'read pgm image format'
=> http://dmsun4.bath.ac.uk/resource/pgm.htm

n°427188
Joel F
Real men use unique_ptr
Posté le 13-06-2003 à 21:58:18  profilanswer
 

keske je disais :D

n°427384
GustyFotz
Posté le 14-06-2003 à 03:44:40  profilanswer
 

Mais c'est grandiose !! Merci... :pt1cable:

n°427408
Taz
bisounours-codeur
Posté le 14-06-2003 à 09:26:52  profilanswer
 

c'est de la merde ce code!! d'habitude les mecs font du pseudo C++ avec des FILE*, la y a des fstream et qeu du scanf/strcmp
 
si je m'ecoutais, je vous démolirais chaque ligne de ce code
 
 
edit: j'attends de toi de tout réécrire en pur C ou en pur C++


Message édité par Taz le 14-06-2003 à 09:28:55
n°427437
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 14-06-2003 à 10:52:37  profilanswer
 

++Taz a écrit :


 
edit: j'attends de toi de tout réécrire en pur C ou en pur C++


 
Toi, tu dois être prof dans la vie ?  :lol:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°427524
Taz
bisounours-codeur
Posté le 14-06-2003 à 13:27:55  profilanswer
 

Tetragrammaton IHVH a écrit :


 
Toi, tu dois être prof dans la vie ?  :lol:  

non grincheux

n°427535
skeye
Posté le 14-06-2003 à 13:53:30  profilanswer
 

Si ++Taz était pas là j'aurais posté le code que j'utilise...mias là il risque de me taper... [:ddr555]

n°427539
Taz
bisounours-codeur
Posté le 14-06-2003 à 13:58:13  profilanswer
 

au point ou en est  :whistle:

mood
Publicité
Posté le 14-06-2003 à 13:58:13  profilanswer
 

n°427545
skeye
Posté le 14-06-2003 à 14:02:27  profilanswer
 

++Taz a écrit :

au point ou en est  :whistle:  


J'ai regardé, en fait je l'ai même pas chez moi... [:skeye]

n°427549
Taz
bisounours-codeur
Posté le 14-06-2003 à 14:08:02  profilanswer
 

[:samduloft]
 
 
edit: sutout qu'en bon C++, le code est tres tres concis. si j'ai le temps, je traduit bien le code de ton lien (file moi un lien vers une image teste)


Message édité par Taz le 14-06-2003 à 14:12:30
n°427552
xav14
Posté le 14-06-2003 à 14:22:29  profilanswer
 

la lib de notre prof pour les tp d'images de maitrise info
j'ai pas la doc mais c'est compréhensible
 
http://iksv.net/.limace

n°427553
Carbon_14
Posté le 14-06-2003 à 14:23:46  profilanswer
 

Une image 126*131 exportée en pgm (par Paint Shop)
http://perso.numericable.fr/~raimopau/macoch.pgm
(cochon corse)

n°427563
Taz
bisounours-codeur
Posté le 14-06-2003 à 14:47:11  profilanswer
 

sans doute pété de bugs, aucune vérification d'erreur, ça vaut ce que ça vaut
 

Code :
  1. #include <iostream>
  2. #include <sstream>
  3. #include <fstream>
  4. #include <string>
  5. #include <algorithm>
  6. #include <iterator>
  7. #include <vector>
  8. #include <stdexcept>
  9. using namespace std;
  10. struct PGMImage
  11. {
  12.   unsigned width;
  13.   unsigned height;
  14.   unsigned maxvalue;
  15.   unsigned char *pt;
  16.   class BadFile
  17.     : public exception
  18.   {};
  19.   ~PGMImage()
  20.   {
  21.     delete[] pt;
  22.   }
  23.   PGMImage(const char * name)
  24.     : width(0),
  25.       height(0),
  26.       maxvalue(0),
  27.       pt(0)
  28.   {
  29.     ifstream file(name, ios::binary);
  30.     if(file.fail())
  31.       {
  32. throw BadFile();
  33.       }
  34.     string line;
  35.     // 1ere ligne
  36.     getline(file, line);
  37.     bool binary = true;
  38.     if(line=="P5" )
  39.       {
  40. binary=true;
  41.       }
  42.     else if(line=="P2" )
  43.       {
  44. binary=false;
  45.       }
  46.     else
  47.       {
  48. throw BadFile();
  49.       }
  50.     // on saut le commentaire eventuel
  51.     getline(file, line);
  52.     if(line[0]=='#')
  53.       {
  54. getline(file, line);
  55.       }
  56.     // on obtient les dimensions
  57.     istringstream is(line);
  58.     is >> this->width >> this->height;
  59.     // la valeur max
  60.     file >> this->maxvalue;
  61.     // on lis les données
  62.     this->pt=new unsigned char [this->width*this->height];
  63.     if (binary)
  64.       {
  65. //We need to read a binary PGM file
  66. file.read(reinterpret_cast<char *>(this->pt), this->width * this->height);
  67.       }
  68.     else
  69.       {
  70. //We need to read in an ASCII file   
  71. copy(istream_iterator<unsigned>(file),
  72.      istream_iterator<unsigned>(),
  73.      this->pt);
  74.       }
  75.   }
  76. };
  77. int main()
  78. {
  79.   PGMImage i("macoch.pgm" );
  80.   cout << i.width << ' ' << i.height << ' ' << i.maxvalue << "\n\n\n";
  81.   cout.write(reinterpret_cast<char *>(i.pt), i.width * i.height);
  82. }

si tant est que ça marche


Message édité par Taz le 14-06-2003 à 14:47:32
n°427567
skeye
Posté le 14-06-2003 à 15:00:34  profilanswer
 

Faudra que je pense à regarde ce code de plus près... :)

n°427568
Taz
bisounours-codeur
Posté le 14-06-2003 à 15:06:45  profilanswer
 

skeye a écrit :

Faudra que je pense à regarde ce code de plus près... :)  

à le vérifier (chez moi ça à l'air de fonctionner, mais je m'avance pas) et à la compléter aussi

n°427570
GustyFotz
Posté le 14-06-2003 à 15:12:34  profilanswer
 

Bon, merci pour toutes vos réponses...
 
Une petite précision : le source doit être écrit en C pur (pas de C++) et doit être super concis, lecture des données uniquement (pas de traitement de l'entête), pas besoin de détecter la taille de l'image (on la connaît c'est 640 x 240), donc en fait, il me faudrait un source qui fasse ça uniquement (pas de fioritures...). Le prog doit s'éxecuter le plus vite possible (sert en fait à l'asservissement d'une table robotique 2D). Une fois l'image stockée dans un tableau, je dois lui faire subir qques opérations, le tout en moins de 16 ms...
 
J'suis pas vraiment une brute en C (vous l'aurez constaté), donc merci encore pour vos coups de pouce...

n°427571
Taz
bisounours-codeur
Posté le 14-06-2003 à 15:14:43  profilanswer
 

t'es chaint bordel, c'est la dernireè fois qu'on me prendra ç ecrire un truc!!!!!!!!!!!!    [:klemix]    [:klemix]    [:klemix]

n°427574
GustyFotz
Posté le 14-06-2003 à 15:20:28  profilanswer
 

En fait, je vais crrément vous expliquer le but du prog que je dois écrire, histoire de récupérer les bonnes idées éventuelles...
 
Voilà, il s'agit d'asservir une table robotique 2D à l'aide d'un traitement d'image. La table n'a pas de capteurs de position, c'est une caméra extérieure (qui film une image solidaire à la table) qui fait office de capteur.
 
L'image représente deux lignes (d'épaisseur inconnue) qui se coupent en un point dont on veut détecter la position. Le ligne se coupent à angle droit plus ou moins 10 degrés.
Je voudrais que le prog en C récupère les coordonnées du point d'intersection.
Idée : Traiter l'image avecune convolution par un filtre de Sobel, la seuiller et régression linéaire sur les points obtenus. On obtiendrait alors deux équations de droites dont le point d'intersection se trouve facilement...
 
Voilà, mais le hic, c'est que ces belles phrases ne me font pas du tout avancer puisque je n'ai aucune idée de la manière de coder ce bordel...
 
Je suis preneur pour toute suggestion...  :hello:  

n°427575
Taz
bisounours-codeur
Posté le 14-06-2003 à 15:21:43  profilanswer
 

1) mets toi au boulot
2/ sinon voir 1

n°427579
skeye
Posté le 14-06-2003 à 15:30:25  profilanswer
 

GustyFotz a écrit :

En fait, je vais crrément vous expliquer le but du prog que je dois écrire, histoire de récupérer les bonnes idées éventuelles...
 
Voilà, il s'agit d'asservir une table robotique 2D à l'aide d'un traitement d'image. La table n'a pas de capteurs de position, c'est une caméra extérieure (qui film une image solidaire à la table) qui fait office de capteur.
 
L'image représente deux lignes (d'épaisseur inconnue) qui se coupent en un point dont on veut détecter la position. Le ligne se coupent à angle droit plus ou moins 10 degrés.
Je voudrais que le prog en C récupère les coordonnées du point d'intersection.
Idée : Traiter l'image avecune convolution par un filtre de Sobel, la seuiller et régression linéaire sur les points obtenus. On obtiendrait alors deux équations de droites dont le point d'intersection se trouve facilement...
 
Voilà, mais le hic, c'est que ces belles phrases ne me font pas du tout avancer puisque je n'ai aucune idée de la manière de coder ce bordel...
 
Je suis preneur pour toute suggestion...  :hello:  
 


Commence par tes entrées/sorties de pgm, c'est simple...
Après il y a bcp de docs sur le net sur sobel, le seuillage, etc...à-partir d'une image discrète...

n°427630
Joel F
Real men use unique_ptr
Posté le 14-06-2003 à 17:57:02  profilanswer
 

Le filtre de Sobel NxN c'etsune bete matrice carré correspondant à la derivée seconde d'une image discréte. Le seuillage c'est un bete test  :
Si pixel(x,y) < Seuil alors Pixel(x,y) = 0 sinon = 255.
 
Ensuite pour determiner tes points d'intersections je te conseille la Transformée de Hough plutôt que la reg linéaire ...
Cette transformée pass du repére x,y a celui r,theta. Puis tu decompte le spoints de meme r et theta.

mood
Publicité
Posté le   profilanswer
 


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

  lire une image pgm

 

Sujets relatifs
Lire une page Web sous excell afin d'en importer quelque bout de codeUtiliser un Canvas pour dessiner dedant, et générer une Image
JNI - Obtenir une image Java à partir d'une image WindowsDétecter des lignes sur une image
Traitement d'image (contrôle image) sous VBA ExcelImpossible de lire une image
lire et écrire une image dont le type est inconnu[C++] Comment lire les données d'une image ?
Chercher doc/code pour lire une image BMP en niveau de gris[VB] Need Help ! : Comment lire une image TIF dans VB ?
Plus de sujets relatifs à : lire une image pgm


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