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

  FORUM HardWare.fr
  Programmation
  Divers

  compter les pixels non blancs dans une image au format de votre choix

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

compter les pixels non blancs dans une image au format de votre choix

n°472040
sheridann
Posté le 30-07-2003 à 14:59:25  profilanswer
 

voila le pb en gros :  
 
Je cherche à calculer la surface projetée sur un plan donné("ombre portée" ) d'une structure modélisée sous CATIA V5, pour différents point de vue de cette structure.
 
Comme j'ai environ 1200 points de vue à traiter, tout doit être automatisé (macros).
Pb, les différentes fonctions de CATIA ne me permettent pas de faire ce que je veux automatiquement.
 
Mon idée pour y parvenir consiste en plusieurs étapes:
 
1)choisir un point de vue donné
2)exporter une vue du modèle (fond blanc-noir-etc possible) dans un format au choix : bmp, jpeg, png, tiff,...
3)Compter le nombre de pixel non blancs dans cette image, ou faire "nb_pixel_total - nb_pixel_blancs"
4)calculer la surface équivalente en fonction du nb de pixel obtenu en 3)
 
Je vous passe les détails pour les étapes 1), 2) et 4).
 
Ce qui m'interresse c'est l'étape 3) : compter les pixels non blancs d'une image ==> avec le moyen que vous voulez (une appli existante ou une petite routine faite maison...)
 
et si possible pouvoir automatiser le traitement d'un "lot" d'images.
 
voilà. Un grand merci à celui qui aura la moindre petite idée ou conseil (à part "Abandonne!!)).
 
à vos cerveaux...
 
 
 


---------------
Shérida(n)² 19-148
mood
Publicité
Posté le 30-07-2003 à 14:59:25  profilanswer
 

n°472042
sheridann
Posté le 30-07-2003 à 15:00:45  profilanswer
 

message aux modérateurs : fausse alerte c'est moi qui ai appuyé sur le lien "prevenir les modérateurs"  :D


---------------
Shérida(n)² 19-148
n°472043
chrisbk
-
Posté le 30-07-2003 à 15:00:53  profilanswer
 

Citation :

Ce qui m'interresse c'est l'étape 3) : compter les pixels non blancs d'une image ==> avec le moyen que vous voulez (une appli existante ou une petite routine faite maison...)


 
quand tu dis non blanc, tu penses non blanc, ou "pas completement blanc, mais un peu quand meme" ?

n°472044
chrisbk
-
Posté le 30-07-2003 à 15:01:22  profilanswer
 

Sheridann a écrit :

message aux modérateurs : fausse alerte c'est moi qui ai appuyé sur le lien "prevenir les modérateurs"  :D  


 
C t pour faire au moins une vue, c'est ca ? :D

n°472047
Taz
bisounours-codeur
Posté le 30-07-2003 à 15:01:43  profilanswer
 

le bmp est simple à lire, bien qu'il existe encore plus simple (ppm, etc)
 
ça devrait te poser problème de faire un petit programme pour compter les pixels.
 
la structure d'une image bmp http://www.daubnet.com/formats/BMP.html

n°472048
Taz
bisounours-codeur
Posté le 30-07-2003 à 15:03:08  profilanswer
 

Sheridann a écrit :

message aux modérateurs : fausse alerte c'est moi qui ai appuyé sur le lien "prevenir les modérateurs"  :D  

merde, j'ai cru à un mec maso... t'es sur de pas en vouloir un peu?

n°472050
Taz
bisounours-codeur
Posté le 30-07-2003 à 15:06:19  profilanswer
 

Qatia avec un Q ?  [:alphat]


Message édité par Taz le 30-07-2003 à 15:11:19
n°472054
sheridann
Posté le 30-07-2003 à 15:09:32  profilanswer
 

chrisbk a écrit :

Citation :

Ce qui m'interresse c'est l'étape 3) : compter les pixels non blancs d'une image ==> avec le moyen que vous voulez (une appli existante ou une petite routine faite maison...)


 
quand tu dis non blanc, tu penses non blanc, ou "pas completement blanc, mais un peu quand meme" ?


 
ben comme je vais certainement devoir passer sur photoshop pour faire une macro de "recradrage", s'il le faut j'en profite pour faire un coup de "baguette magique" (si tu connais pas photoshop ==> c'est pour sélectionner les pixels qui ont a peu prés la même couleur) avec un tolérance pas trop serrée, puis je peint tout ça en blanc-blanc-complètement_blanc.


---------------
Shérida(n)² 19-148
n°472058
chrisbk
-
Posté le 30-07-2003 à 15:11:23  profilanswer
 

En quel langage tu veux faire ca ?

n°472076
darkoli
Le Petit Dinosaure Bleu
Posté le 30-07-2003 à 15:29:33  profilanswer
 

Par exemple si tu prends le format BMP 24 bits non compressés ça devrait être super simple à condition d'avoir un peu de place sur ton disque car la taille de l'image est importante : (x*y*3)+54+(m*x) ou m est un nombre entre 1 et 3 pour que la longueur des lignes soit un multiple de 4.
 
Pour compter les pixels blanc (0xFFFFFF) il suffit d'ouvrir le fichier, de sauter les 54 premiers octets et de faire 'pixel_blanc++) chaque fois que tu as trois octets consécutifs à 255 ! (Avec quelques améliorations (pour se positionner correctement lors d'une nouvelle ligne ça devrait être bon).
 
C'est super facile à faire !

mood
Publicité
Posté le 30-07-2003 à 15:29:33  profilanswer
 

n°472088
darkoli
Le Petit Dinosaure Bleu
Posté le 30-07-2003 à 15:36:11  profilanswer
 

Voilà le programme écrit rapidment et salement !
 
unsigned char  tampon[50000];
int            largeur=0;
int            hauteur=0;
int            taille=0; /* Longueur d'une ligne (dans le fichier) */
int            nb_pixels=0;
int            nb_pixels_blancs=0;
int            i=0;
 
 
fichier=fopen(nom_du_fichier,"rt" );
if (fichier == (FILE*)NULL) return ERREUR;
if (fgets(tampon, 54, fichier) == NULL) return ERREUR;
largeur=(((((tampon[21] << 8) + tampon[20]) << 8) + tampon[19]) << 8) + tampon[18];
hauteur=(((((tampon[25] << 8) + tampon[24]) << 8) + tampon[23]) << 8) + tampon[22];
nb_pixels=largeur*hauteur;
taille=largeur*3;
if ( (taille % 4) != 0 ) taille+=4-(taille%4);
while (fgets(tampon, taille, fichier) != NULL)
 {
  for (i=0;i<largeur;i++)
   {
    if ( (tampon[i*3] == 255) && (tampon[(i*3)+1] == 255) && (tampon[(i*3)+2] == 255) ) (tampon[i*3] == 255)++;
   }
 }
fprintf(stdout, "nb_pixels_blancs = %d (%.2f).\n", ((double)nb_pixels_blancs/(double)nb_pixels)*100.00);
fprintf(stdout, "nb_pixels        = %d.\n", nb_pixels);

n°472093
Taz
bisounours-codeur
Posté le 30-07-2003 à 15:39:08  profilanswer
 

mauvaise idée le tampon surtout de cette forme. soit pas de tampon, soit un tampon de ligne, soit tout le fichier en mémoire
 
en plus 500000 c'est meme pas divisible par 3, tu peux toujours courir

n°472123
gilou
Modérateur
Modzilla
Posté le 30-07-2003 à 15:58:59  profilanswer
 

Sheridann a écrit :

message aux modérateurs : fausse alerte c'est moi qui ai appuyé sur le lien "prevenir les modérateurs"  :D  


ListOfBoulaÿ add: Sheridann
A+,


Message édité par gilou le 30-07-2003 à 15:59:27

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°472130
Mara's dad
Yes I can !
Posté le 30-07-2003 à 16:03:19  profilanswer
 

gilou a écrit :


ListOfBoulaÿ add: Sheridann
A+,


Faut par réveiller un ours qui hiberne c'est çà ?
 
gilou, tu sais que c'est l'été depuis un bout de temps maintenant :sarcastic:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°472141
gilou
Modérateur
Modzilla
Posté le 30-07-2003 à 16:06:59  profilanswer
 

Mara's dad a écrit :


Faut par réveiller un ours qui hiberne c'est çà ?
 
gilou, tu sais que c'est l'été depuis un bout de temps maintenant :sarcastic:  


Justement, en ete, je fais la fete et je modere moins :whistle:  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°472168
darkoli
Le Petit Dinosaure Bleu
Posté le 30-07-2003 à 16:21:52  profilanswer
 

Taz a écrit :

mauvaise idée le tampon surtout de cette forme. soit pas de tampon, soit un tampon de ligne, soit tout le fichier en mémoire
 
en plus 500000 c'est meme pas divisible par 3, tu peux toujours courir


comme je l'ai dis c'est fait très salement !
Mais de toute façon je ne lis pas 50000 octets à chaque fois !
Le première fois je 54 octets (entête du fichier bmp) et ensuite je lis ligne par ligne.
 
Donc ça ne me dérange pas et je ne voulais pas faire une allocation mémoire en fonction de la taille des lignes !

n°472175
sheridann
Posté le 30-07-2003 à 16:24:45  profilanswer
 

ben en fait je connais les "bases" de la programmation et de l'algorythmique mais je n'ai pas bcq programmé sous VB, C++ etc
 
je compte importer le fichier bmp en texte dans une cellule d'un tableau Excell et compter le nb de caractères correspondant à la couleur que je recherche. (je sais c un peu bourrin et certainement moins perfommant qu'avec une vraie routine mais bon...)
 
tu connais une commande qui permet de faire ça sous excell ?


---------------
Shérida(n)² 19-148
n°472180
sheridann
Posté le 30-07-2003 à 16:26:12  profilanswer
 

gilou a écrit :


ListOfBoulaÿ add: Sheridann
A+,


 
 :ange:  :sleep:  :heink:  :na:


---------------
Shérida(n)² 19-148
n°472183
Taz
bisounours-codeur
Posté le 30-07-2003 à 16:26:54  profilanswer
 

ça va être la mort d'importer ça d'en excel! tu imagines qu'une image 100*100 fait déjà 100000 cellules?

n°472193
sheridann
Posté le 30-07-2003 à 16:33:23  profilanswer
 

Taz a écrit :

ça va être la mort d'importer ça d'en excel! tu imagines qu'une image 100*100 fait déjà 100000 cellules?


 
ben non justement, comme il n'y a pas de séparateurs entre les différents pixels ça fait pas 100000 cellules de 1 pixel mais 1 cellule de 100000 caractères... ==> je suis pas franchement convaincu que ça change grand chose au pb mais bon :D  
 
merci quand-même de t'intéresser à mon pb.


---------------
Shérida(n)² 19-148
n°472195
Taz
bisounours-codeur
Posté le 30-07-2003 à 16:36:14  profilanswer
 

franchement, si tes images sont simples, toutes au même format (genre bmp, 24 bits) c'est pas tres compliqué d'ecrire un programme pour faire ça. tu vas beaucoup t'embeter avec excel quie st pas fait pour ça, et ça va etre extrement lent

n°472196
skeye
Posté le 30-07-2003 à 16:37:27  profilanswer
 

Sheridann a écrit :


 
ben non justement, comme il n'y a pas de séparateurs entre les différents pixels ça fait pas 100000 cellules de 1 pixel mais 1 cellule de 100000 caractères... ==> je suis pas franchement convaincu que ça change grand chose au pb mais bon :D  
 
merci quand-même de t'intéresser à mon pb.


Et tu es sur qu'excel peut faire rentrer 100000 caractères dans une cellule? :heink:

n°472202
sheridann
Posté le 30-07-2003 à 16:43:23  profilanswer
 

c clair kil risque de ne pas apprécier a plaisanterie ==> faudrait vraiment que je n'y mette à apprendre VB ou C++ :D


---------------
Shérida(n)² 19-148
n°472213
skeye
Posté le 30-07-2003 à 16:47:11  profilanswer
 

Sheridann a écrit :

c clair kil risque de ne pas apprécier a plaisanterie ==> faudrait vraiment que je n'y mette à apprendre VB ou C++ :D


En C/C++ ce serait assez vite fait je pense... [:skeye]  
Et si tu peux exporter en ppm encore plus!

n°472221
Taz
bisounours-codeur
Posté le 30-07-2003 à 16:48:41  profilanswer
 

+1 pour le ppm

n°472227
sheridann
Posté le 30-07-2003 à 16:50:20  profilanswer
 

Taz a écrit :

franchement, si tes images sont simples, toutes au même format (genre bmp, 24 bits) c'est pas tres compliqué d'ecrire un programme pour faire ça. tu vas beaucoup t'embeter avec excel quie st pas fait pour ça, et ça va etre extrement lent


 
comme je t'ai dit, je connais la programmation procédurale "classique" et je sais éditer et modifier des macros en "orienté objet" crées "automatiquemement" sous VB (dans Excell, Access).
 
Mais je ne pratique pas assez pour faire mon code moi-même sous VB ou C++ donc je ne connais pas les Propriètés et Méthodes vers lequelles pointer.
mais bon je vais voir ce que je peux faire en cha=erchant un peu.
 
Merci à tous...


---------------
Shérida(n)² 19-148
n°472232
skeye
Posté le 30-07-2003 à 16:53:16  profilanswer
 

Sheridann a écrit :


 
comme je t'ai dit, je connais la programmation procédurale "classique" et je sais éditer et modifier des macros en "orienté objet" crées "automatiquemement" sous VB (dans Excell, Access).
 
Mais je ne pratique pas assez pour faire mon code moi-même sous VB ou C++ donc je ne connais pas les Propriètés et Méthodes vers lequelles pointer.
mais bon je vais voir ce que je peux faire en cha=erchant un peu.
 
Merci à tous...


Bah en C/C++ ouvrir un fichier et en lire le contenu est très très simple...
D'ailleurs ca doit être facile de trouver des exemples de code pour lire du ppm, y compris dans le forum!

n°472244
sheridann
Posté le 30-07-2003 à 17:01:49  profilanswer
 

pas con, je vais chercher


---------------
Shérida(n)² 19-148
n°472248
Taz
bisounours-codeur
Posté le 30-07-2003 à 17:05:16  profilanswer
 

une classe C++ faites pour je sais plus qui
 
 

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

n°472262
sheridann
Posté le 30-07-2003 à 17:11:54  profilanswer
 

Taz a écrit :

une classe C++ faites pour je sais plus qui
 
 [cpp]#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
#include <stdexcept>
...
 
...
 


 
ouaip c bien ce que je disais : fo vraiment que je me mette au C++
 
merci bcq mais là je ne suis plus.
 
si t'as le même genre de truc en VB je suis preneur, mais te prendspas trop la tête quand-même...
 
merci encore


---------------
Shérida(n)² 19-148
n°472275
Taz
bisounours-codeur
Posté le 30-07-2003 à 17:17:56  profilanswer
 

you don't know me....

n°472283
skeye
Posté le 30-07-2003 à 17:22:18  profilanswer
 

Sheridann a écrit :


ouaip c bien ce que je disais : fo vraiment que je me mette au C++
 
merci bcq mais là je ne suis plus.


T'inquiètes pas c'est normal...Taz c'est un intégriste C++ [:ddr555]  
En cherchant un brin tu trouveras surement du code plus proche de ce que tu connais...


Message édité par skeye le 30-07-2003 à 17:22:29
mood
Publicité
Posté le   profilanswer
 


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

  compter les pixels non blancs dans une image au format de votre choix

 

Sujets relatifs
[HTML] rendre une image flottante et "persistante"[DELPHI] Rotation d'une image
[JAVA] URL du format : http://LOGIN:PASSWORD@ma-machi ne [RESOLU]Pas de Background Image
[CSS] Positionnement d'un menu pas rapport a une image![PHP] Executer un script en appelant une image
[JScript] Compter les fichiers (*.toto) d'un repertoireChanger une image en fonction de la sélection d'un menu déroulant ?
[VBA] Lire un fichier au format UnixChoix d'Eclipse en IDE universel
Plus de sujets relatifs à : compter les pixels non blancs dans une image au format de votre choix


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