compter les pixels non blancs dans une image au format de votre choix - Divers - Programmation
Marsh Posté le 30-07-2003 à 15:00:45
message aux modérateurs : fausse alerte c'est moi qui ai appuyé sur le lien "prevenir les modérateurs"
Marsh Posté le 30-07-2003 à 15:00:53
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" ?
Marsh Posté le 30-07-2003 à 15:01:22
Sheridann a écrit : message aux modérateurs : fausse alerte c'est moi qui ai appuyé sur le lien "prevenir les modérateurs" |
C t pour faire au moins une vue, c'est ca ?
Marsh Posté le 30-07-2003 à 15:01:43
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
Marsh Posté le 30-07-2003 à 15:03:08
Sheridann a écrit : message aux modérateurs : fausse alerte c'est moi qui ai appuyé sur le lien "prevenir les modérateurs" |
merde, j'ai cru à un mec maso... t'es sur de pas en vouloir un peu?
Marsh Posté le 30-07-2003 à 15:06:19
Qatia avec un Q ?
Marsh Posté le 30-07-2003 à 15:09:32
chrisbk a écrit :
|
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.
Marsh Posté le 30-07-2003 à 15:29:33
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 !
Marsh Posté le 30-07-2003 à 15:36:11
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);
Marsh Posté le 30-07-2003 à 15:39:08
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
Marsh Posté le 30-07-2003 à 15:58:59
Sheridann a écrit : message aux modérateurs : fausse alerte c'est moi qui ai appuyé sur le lien "prevenir les modérateurs" |
ListOfBoulaÿ add: Sheridann
A+,
Marsh Posté le 30-07-2003 à 16:03:19
gilou 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
Marsh Posté le 30-07-2003 à 16:06:59
Mara's dad a écrit : |
Justement, en ete, je fais la fete et je modere moins
A+,
Marsh Posté le 30-07-2003 à 16:21:52
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 |
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 !
Marsh Posté le 30-07-2003 à 16:24:45
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 ?
Marsh Posté le 30-07-2003 à 16:26:12
ReplyMarsh Posté le 30-07-2003 à 16:26:54
ça va être la mort d'importer ça d'en excel! tu imagines qu'une image 100*100 fait déjà 100000 cellules?
Marsh Posté le 30-07-2003 à 16:33:23
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
merci quand-même de t'intéresser à mon pb.
Marsh Posté le 30-07-2003 à 16:36:14
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
Marsh Posté le 30-07-2003 à 16:37:27
Sheridann a écrit : |
Et tu es sur qu'excel peut faire rentrer 100000 caractères dans une cellule?
Marsh Posté le 30-07-2003 à 16:43:23
c clair kil risque de ne pas apprécier a plaisanterie ==> faudrait vraiment que je n'y mette à apprendre VB ou C++
Marsh Posté le 30-07-2003 à 16:47:11
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++ |
En C/C++ ce serait assez vite fait je pense...
Et si tu peux exporter en ppm encore plus!
Marsh Posté le 30-07-2003 à 16:50:20
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...
Marsh Posté le 30-07-2003 à 16:53:16
Sheridann a écrit : |
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!
Marsh Posté le 30-07-2003 à 17:01:49
pas con, je vais chercher
Marsh Posté le 30-07-2003 à 17:05:16
une classe C++ faites pour je sais plus qui
Code :
|
Marsh Posté le 30-07-2003 à 17:11:54
Taz a écrit : une classe C++ faites pour je sais plus qui |
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
Marsh Posté le 30-07-2003 à 17:22:18
Sheridann a écrit : |
T'inquiètes pas c'est normal...Taz c'est un intégriste C++
En cherchant un brin tu trouveras surement du code plus proche de ce que tu connais...
Marsh Posté le 30-07-2003 à 14:59:25
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