Aller au contenu

Binariser une image en .txt


K-LiBRE

Messages recommandés

Bonjour à tous,

J'ai trouver un logiciel de binarisation : Binarization Image Processor, mais lorsque je binarise une image et que je l'ouvre avec bloc note, j'ai des caractères inconnu, pas ceux que je voudrais obtenir (c'est à dire de 0 et des 1 avec la longueur et la largeur de l'image (ce qui pourrais me permettre d'introduire des images dans le logiciel jgraps lorsque je programme en java)). Comment pourrais je procéder ?

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous,

J'ai trouver un logiciel de binarisation : Binarization Image Processor, mais lorsque je binarise une image et que je l'ouvre avec bloc note, j'ai des caractères inconnu, pas ceux que je voudrais obtenir (c'est à dire de 0 et des 1 avec la longueur et la largeur de l'image (ce qui pourrais me permettre d'introduire des images dans le logiciel jgraps lorsque je programme en java)). Comment pourrais je procéder ?

Merci d'avance.

ouvre le plutot avec un editeur hexa ... si tu attend de voir les 0 et 1 en TXT je crois que tu peux attendre longtemps

Lien vers le commentaire
Partager sur d’autres sites

Haha... Et elle feront quelle taille tes images si tu les transforme en 0 et en 1 ? :chinois:

Je te conseille plutôt d'utiliser Base64 : tu n'obtiendras que des caractères visibles ASCII et ça sera quand même plus petit que des caractères 0/1. Et c'est un format que tu trouvera en standard dans la quasi-totalité des librairies.

Lien vers le commentaire
Partager sur d’autres sites

Personne en peut me dire comment faire pour avoir une image en binaire avec des 1 pour les pixels noir et des 0 pour les pixels blanc ?

Je dis juste ca comme ca mais a mon avis tu as plus besoin d'une librairie pour lire le BMP ( ou autres ), ensuite de scan ta matrice de point et tu rempli au fur et a mesure ton fichier texte.

Mais en soit ce que tu dis enfin pour moi ne mene a rien, ton image meme en BMP peut posseder un encodage tu peux pas le dumper comme ca poulet.

Lien vers le commentaire
Partager sur d’autres sites

bah tu ouvre une image, tu lui applique un filtre (genre norme carrée sur le noir, avec un seuil bien choisi)...normallement, tu devrait récupérer une matrice de 0 et de 1 (enfin 255 pour chaque canal de couleur)...que tu pourra sauvegarder au format txt...regarde dans les classes de java.awt.image :incline:

Tu fait une classe qui étend de RGBImageFilter, dans le constructeur, tu met canFilterIndexColorModel à true, et tu met override la méthode filterRGB à l'aide de celle ci-dessous...

	public int filterRGB (int x, int y, int rgb) {
	int alpha = rgb & 0xFF000000;

    int red= (rgb & 0xFF0000) >> 16;
    int green = (rgb & 0x00FF00) >> 8;
    int blue = (rgb & 0x0000FF) ;
    int min = Math.min(red, Math.min(green, blue));
    int max = Math.max(red, Math.max(green, blue));
    int c;

    // If all the channels are less than the limit the output color is black.
    // Otherwise output color is White.
    if (min < limit && max < limit) 
    	c = 0;
    else 
    	c=255;
    return alpha | (c << 16) | (c << 8 ) | c;
}

en combinant avec ce que tu peux lire ici, http://www.exampledepot.com/egs/java.awt.i.../FilterRgb.html , tu devrait t'en sortir...ou du moins, tu aura pas mal avancé :p

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Est ce que ce serait quelque chose qui transforme ton image comme ça que tu cherche ?

, , , ,

,@@@@####@@@@@##@@#@@@@@@@@@@W

*W@@ .**++.,,,,@@@@@@@@@@W

*WW ,*::::,,..,,,.@@@@@@@@@W

*@* ,#*.,,,,.,:.,,,@@@@@@@@@W

*W ,,+@:,,,,,,,:.,,*@@@@@@@@W

***,,+@.,,,,,,,,., .@@@@@@@@W

,*:++,#,,,,,,,,,..,,,@@@@@@@@W

***W ::,,,,,,,,.::..,*@@@@@@W

*.+@+..,,,,,,,,.:+:#+,,*@@@WW

*..@W#.::,,,,:@##**@@:, @@@WW

*.::@W#,+@.,.#*..*@@@#., @@WW

*,:+W@*.,,*,.: *@@@W*:,,@@WW

*, .+*@@W+,,. ,@@:#@#., ,,@@W

,+:,@W@.#,,,,:, ,,.+@@:,,,:.@W

* :WW#.,,,##W,,,,.*@@@.,,,,@W

*,@@@#+,,,WW#* ,.+@@.:,:,,,@W

*,++#@@+,,,, , .:#@@*++#::,@W

,*@ @*#*+,.@@@@,,:*@#++#W:, @W

*, *#:.,::.,,. ,.+@@+#*#:,@@W

*,*#+#@#..+@*,,.:+@@@@#@+: @W

*::#@*+*:,,,,,,:*@@@@@@##* @W

**###::,,.,,,,:@@@@@@@@@*:*@W

**##*+*#:####@@@@@@@@@@@@.@@W

******+#@+@@@@@@@@@@@W@@@@+*W

*:*####+@##@@@@@@@@@W.:+.:+#W

*+#####*+#@@@@@@@@@@.,,.::*#W

*#*#####*+*@@@@@@@@*,,,.:*#@W

,:##+#####++@@@@@@@#,,,..+#@@W

,WWWWWWWWWWWWWWWWWWWWWWWWWWWWW

La c'est censé représenter Marylin Monroe :D

J'ai troouvé ça ici

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Est ce que ce serait quelque chose qui transforme ton image comme ça que tu cherche ?

, , , ,

,@@@@####@@@@@##@@#@@@@@@@@@@W

*W@@ .**++.,,,,@@@@@@@@@@W

*WW ,*::::,,..,,,.@@@@@@@@@W

*@* ,#*.,,,,.,:.,,,@@@@@@@@@W

*W ,,+@:,,,,,,,:.,,*@@@@@@@@W

***,,+@.,,,,,,,,., .@@@@@@@@W

,*:++,#,,,,,,,,,..,,,@@@@@@@@W

***W ::,,,,,,,,.::..,*@@@@@@W

*.+@+..,,,,,,,,.:+:#+,,*@@@WW

*..@W#.::,,,,:@##**@@:, @@@WW

*.::@W#,+@.,.#*..*@@@#., @@WW

*,:+W@*.,,*,.: *@@@W*:,,@@WW

*, .+*@@W+,,. ,@@:#@#., ,,@@W

,+:,@W@.#,,,,:, ,,.+@@:,,,:.@W

* :WW#.,,,##W,,,,.*@@@.,,,,@W

*,@@@#+,,,WW#* ,.+@@.:,:,,,@W

*,++#@@+,,,, , .:#@@*++#::,@W

,*@ @*#*+,.@@@@,,:*@#++#W:, @W

*, *#:.,::.,,. ,.+@@+#*#:,@@W

*,*#+#@#..+@*,,.:+@@@@#@+: @W

*::#@*+*:,,,,,,:*@@@@@@##* @W

**###::,,.,,,,:@@@@@@@@@*:*@W

**##*+*#:####@@@@@@@@@@@@.@@W

******+#@+@@@@@@@@@@@W@@@@+*W

*:*####+@##@@@@@@@@@W.:+.:+#W

*+#####*+#@@@@@@@@@@.,,.::*#W

*#*#####*+*@@@@@@@@*,,,.:*#@W

,:##+#####++@@@@@@@#,,,..+#@@W

,WWWWWWWWWWWWWWWWWWWWWWWWWWWWW

La c'est censé représenter Marylin Monroe :smack:

J'ai troouvé ça ici

non ce n'est pas ça ^^

et je connais ART ASCII, mais il ne permet pas de convertir des fichiers, juste de faire des dessins donc sa m'aide mais juste pour dessiner à la main

Lien vers le commentaire
Partager sur d’autres sites

bah tu ouvre une image, tu lui applique un filtre (genre norme carrée sur le noir, avec un seuil bien choisi)...normallement, tu devrait récupérer une matrice de 0 et de 1 (enfin 255 pour chaque canal de couleur)...que tu pourra sauvegarder au format txt...regarde dans les classes de java.awt.image :smack:

Tu fait une classe qui étend de RGBImageFilter, dans le constructeur, tu met canFilterIndexColorModel à true, et tu met override la méthode filterRGB à l'aide de celle ci-dessous...

	public int filterRGB (int x, int y, int rgb) {
	int alpha = rgb & 0xFF000000;

    int red= (rgb & 0xFF0000) >> 16;
    int green = (rgb & 0x00FF00) >> 8;
    int blue = (rgb & 0x0000FF) ;
    int min = Math.min(red, Math.min(green, blue));
    int max = Math.max(red, Math.max(green, blue));
    int c;

    // If all the channels are less than the limit the output color is black.
    // Otherwise output color is White.
    if (min < limit && max < limit) 
    	c = 0;
    else 
    	c=255;
    return alpha | (c << 16) | (c << 8 ) | c;
}

en combinant avec ce que tu peux lire ici, http://www.exampledepot.com/egs/java.awt.i.../FilterRgb.html , tu devrait t'en sortir...ou du moins, tu aura pas mal avancé :eeek:

merci beaucoup pour ta réponses mais je ne comprend pas la moitié de ce que tu programme xD canFilterIndexColorModel RGBImageFilter les constructeur... je connais pas.

ça non plus je ne sais pas ce que c'est ">>" :S dsl

Lien vers le commentaire
Partager sur d’autres sites

Bah disons que un entier (int) en java = 32 bits...et qu'un pixel RGB+canal alpha, tous codés sur 8 bits = 32 bits...

chaque pixel de couleur est donc codé de la sorte (pseudo-hexa) : AA RR GG BB

pour le cas de ce filtre, le canal alpha (transparence) ne nous intéresse pas, donc on l'isole et on le sauvegarde pour plus tard...les F indiquent les bits que l'on veut conserver

int alpha = rgb & 0xFF000000;

on récupère ensuite les canaux rouge, vert et bleu, pour ce faire, on doit procéder de la même manière que précédemment, en "marquant" comme précédemment les portions de l'entier que l'on veut garder avec des F (ou des 1111 si tu préfère)

int red = rgb & 0xFF0000;

int green = rgb & 0x00FF00;

int blue = rgb & 0x0000FF;

sauf que pour là, on a tout sauf des valeurs facilement comparable...le rouge va être représenté par un "grand" nombre, le vert par un "moyen" nombre, et le bleu par un "petit" nombre...il faut donc tous les ramener à des valeurs comparables, comprises entre 0 et 255...

- pour le bleu, il n'y a rien à faire, on n'utilise que les bits les plus bas de l'entier...on a donc déjà des valeurs comprises entre 0 et 255.

- pour le rouge, les 16 bits les plus à droite ne nous servent à rien, on les supprime donc à l'aide de l'opérateur de décallage de bits ">>"

int red = red >> 16;

- pour le vert, les 8 bits les plus à droite ne nous servent à rien, même combat :

int green = green >> 8;

Après, pour le coup de l'algo de filtrage...bah c'est comme ca, on recherche le min et le max des trois canaux...si ces deux valeurs sont en dessous d'une certaine limite : on met tous les canaux du pixel à 0, 255 sinon.

Pour recomposer le pixel, on doit ajouter le canal alpha, le canal rouge en lui recollant les 16 bits qu'on lui a enlevé, le canal vert et les 8 bits qu'on lui a enlevé, et on ajoute le canal bleu...

Lien vers le commentaire
Partager sur d’autres sites

Bah disons que un entier en java = 32 bits...et qu'un pixel RGB+canal alpha, tous codés sur 8 bits = 32 bits...

chaque pixel de couleur est donc codé de la sorte (pseudo-hexa) : AA RR GG BB

pour le cas de ce filtre, le canal alpha (transparence) ne nous intéresse pas, donc on l'isole et on le sauvegarde pour plus tard...les F indiquent les bits que l'on veut conserver

int alpha = rgb & 0xFF000000;

on récupère ensuite les canaux rouge, vert et bleu, pour ce faire, on doit procéder de la même manière que précédemment, en "marquant" comme précédemment les portions de l'entier que l'on veut garder avec des F (ou des 1111 si tu préfère)

int red = rgb & 0xFF0000;

int green = rgb & 0x00FF00;

int blue = rgb & 0x0000FF;

sauf que pour là, on a tout sauf des valeurs facilement comparable...le rouge va être représenté par un "grand" nombre, le vert par un "moyen" nombre, et le bleu par un "petit" nombre...il faut donc tous les ramener à des valeurs comparables, comprises entre 0 et 255...

- pour le bleu, il n'y a rien à faire, on n'utilise que les bits les plus bas de l'entier...on a donc déjà des valeurs comprises entre 0 et 255.

- pour le rouge, les 16 bits les plus à droite ne nous servent à rien, on les supprime donc à l'aide de l'opérateur de décallage de bits ">>"

int red = red >> 16;

- pour le vert, les 8 bits les plus à droite ne nous servent à rien, même combat :

int green = green >> 8;

Après, pour le coup de l'algo de filtrage...bah c'est comme ca, on recherche le min et le max des trois canaux...si ces deux valeurs sont en dessous d'une certaine limite : on met tous les canaux du pixel à 0, 255 sinon.

Pour recomposer le pixel, on doit ajouter le canal alpha, le canal rouge en lui recollant les 16 bits qu'on lui a enlevé, le canal vert et les 8 bits qu'on lui a enlevé, et on ajoute le canal bleu...

ok j'ai à peut près compris (après avoir relus 4 fois XD)! Donc grâce à ça on obtient le pixel envoyé a la fonction en pixel noir ou pixel blanc, c'est bien sa ?

Après il faudrait dire un truc du genre :

if (pixel en x y <= 177)

écrire 0 dans *.txt

else

écrire 1

est ce que se serai ça http://www.exampledepot.com/egs/java.awt.i.../FilterRgb.html ? ou alors tu l'a mis dans ton code block déjà ?

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...