Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 19 utilisateurs en ligne, consultez le détail
Auteur Message
Azollyx
#0 Message posté le : 17-02-2008 à 16:46:47


Hobbit


Forum : Modérateur
Association : Membre actif
Arrivé(e) le : 09-04-2006
Nombre de messages : 1956
Yo !

Je rechercherais un programme qui me permette d'étudier la fréquence des couleurs dans une image PNM ou JFIF/JPEG, en ligne de commande.
En fait, c'est pour un script qui devra déterminer le type d'image auquel il a affaire (image ou texte) pour appeler pnmtojpeg avec les bonnes options.

-------------------------------------
Azollyx Horaldius [http://www.azollyx.eu/]
stanislas
#1 Message posté le : 17-02-2008 à 17:01:24


Jedi


Forum : Administrateur
Association : Membre fondateur
Arrivé(e) le : 08-05-2003
Nombre de messages : 4286
Euh ... dans la suite d'utilitaires d'ImageMagick, il devrait déjà y avoir tout ce que tu veux, non ?

-------------------------------------
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas.
jblecanard
#2 Message posté le : 17-02-2008 à 20:42:10


Elfe


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 3942
Je ne sais pas si ça existe et ça m'étonnerait un peu car c'est quand même vachement spécifique, mais au pire, tu peux le coder toi-même. A mon avis ça se fait assez facilement en Java ou en C++.

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -
Azollyx
#3 Message posté le : 17-02-2008 à 23:03:00


Hobbit


Forum : Modérateur
Association : Membre actif
Arrivé(e) le : 09-04-2006
Nombre de messages : 1956
Pour ImageMagick, j'ai un peu regardé mais je n'ai rien vu.
La man de libpnm semble me convaincre que ça devrait pouvoir se faire rapidement en C... même si la notion de "xel" m'est encore totalement inconnue.
Je vais regarder ça... demain, enfin il faudrait que je regardes ça demain pas ce soir, ça ne serait pas sérieux voyons.

L'idée était en fait de tout simplement limiter la place par mes documents numérisés/archivés. C'est peut-être insignifiant mais un document noir et blanc qui prend plus de 500 Kio, c'est de la perte pure. C'est toujours ça de gagné, surtout si c'est fait de manière transparente.

-------------------------------------
Azollyx Horaldius [http://www.azollyx.eu/]
Azollyx
#4 Message posté le : 18-02-2008 à 00:48:46


Hobbit


Forum : Modérateur
Association : Membre actif
Arrivé(e) le : 09-04-2006
Nombre de messages : 1956
Voilà un premier morceau... Maintenant il faut que je pense à un algorithme qui me permette de déterminer un peu plus précisément les choses. ^^

#include <pam.h>



#include <stdio.h>

#include <stdlib.h>







int main(int argc, char **argv) {

        FILE * fin = stdin;



        struct pam inpam;

        tuple * tuplerow;

        unsigned int row;



        unsigned int i;

        unsigned int * csc = (unsigned int *) malloc(inpam.depth*sizeof(unsigned int));





        pm_init(argv[0], 0); // *** ???

        pnm_readpaminit(fin, &inpam, PAM_STRUCT_SIZE(tuple_type));

        tuplerow = pnm_allocpamrow(&inpam);



        for(row=0; row<inpam.height; row++) {

                unsigned int column;

                pnm_readpamrow(&inpam, tuplerow);

                for(column=0; column<inpam.width; ++column) {

                        unsigned int plane;

                        unsigned int sum = 0;

                        for(plane=0; plane<inpam.depth; ++plane) sum += tuplerow[column][plane];

                        for(plane=0; plane<inpam.depth; ++plane) {

                                printf("%d/%d\t",tuplerow[column][plane],sum);

                                unsigned int val = tuplerow[column][plane];

                                if(4*val > sum && 2*val < sum) {

                                } else  csc[plane]++;

                        } printf("\n");

                } printf("\n");

        }



        pnm_freepamrow(tuplerow);



        for(i=0; i<inpam.depth; i++)

                printf("%d\t%d\n", i,csc[i]);



        return EXIT_SUCCESS;

}


-------------------------------------
Azollyx Horaldius [http://www.azollyx.eu/]
jblecanard
#5 Message posté le : 18-02-2008 à 13:32:51


Elfe


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 3942
Je pense que le plus gros du boulot est fait là, et que la suite dépend plus du raisonnement mathématique que tu veux adopter que de l'obstacle technique...

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -
Azollyx
#6 Message posté le : 18-02-2008 à 17:25:42


Hobbit


Forum : Modérateur
Association : Membre actif
Arrivé(e) le : 09-04-2006
Nombre de messages : 1956
Voilà, tout est (attention 'is_grayscalable' est un binaire, 'numeriser' est bien un script mais mon CMS le reconnaît mal... il a de l'âge). J'explique ici comment j'ai procédé.

édit : bon, j'avoue le gain n'est pas aussi important qu'espéré mais je me suis bien amusé.

--Message édité par Azollyx le 18-02-2008 à 17:36:11--


-------------------------------------
Azollyx Horaldius [http://www.azollyx.eu/]