Surface d'une zone à partir de sa couleur sur un bitmap [Résolu]

Messages postés
6
Date d'inscription
lundi 3 janvier 2011
Dernière intervention
15 juin 2011
- - Dernière réponse : maxime0038
Messages postés
6
Date d'inscription
lundi 3 janvier 2011
Dernière intervention
15 juin 2011
- 5 janv. 2011 à 09:14
Bonjour à tous,

Est-il possible de déterminer la surface de zones dont la couleur est uniforme sur un bitmap ?
Je souhaiterais, par exemple, si mon image est un tableau de 25 cases de tailles différentes, déterminer la taille de la plus grande case, de la plus petite, la taille moyenne des cases...
Dans mon cas, les formes, en réalité, ne sont pas des rectangles mais peuvent ressembler à n'importe quoi.
Autre petite difficulté, je ne peux pas utiliser le nombre de pixel de la même couleur sur l'image étant donné que plusieurs formes distinctes peuvent avoir la même couleur.

Si vous avez des idées...

Merci beaucoup.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
3
Merci
Salut,

Tel que le problème est exposé, je ne vois qu'un truc: c'est d'utiliser l'algo de Canvas.FloodFill. Mais ça ne va pas être très performant...

EN GROS :
1) Tu travailles sur une copie mémoire de ton Bitmap.
2) Tu le parcours pour lister les couleurs présentes.
3) Tu en déduis un tableau de couleurs qui n'y figurent pas (voir sa taille selon les besoins de ton application, mais supérieure au nombre de couleurs présentes, bien sûr).
4) Tu parcours de nouveau le bitmap, et à chaque nouvelle couleur trouvée qui fait partie des couleurs originales, tu fais un Canvas.FloodFill avec les couleurs du tableau (en l'incrémentant à chaque fois).
5) Tu parcours de nouveau le Bitmap en comptant les pixels de couleurs différentes. Tu auras autant de surfaces différentes que le nombre de couleurs employées (à adapter selon la couleur des 'frontières', s'il y en a...).

Voilà. Ca répond à peu près à ta question. Mais peut-être vaudrait-il mieux réfléchir à la façon de colorier les surfaces à l'origine plutôt que de ramper dans les tuyaux de cette usine à gaz...


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Caribensila
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
Y'a ça aussi.


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
Commenter la réponse de Caribensila
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
0
Merci
Salut,

j' ai pas compris mais reagrde déjà mon compo TcySkinArea:

ici :
Composants Cindy pour Delphi

Télécharge la démo,

A+
Commenter la réponse de cs_MAURICIO
Messages postés
6
Date d'inscription
lundi 3 janvier 2011
Dernière intervention
15 juin 2011
0
Merci
Merci beaucoup, je pense pouvoir m'en sortir...

Toutefois, je vais tenter de préciser si jamais quelqu'un voit une méthode susceptible d'être plus efficace.
J'ai une zone blanche sur laquelle je dessine différentes lignes de façon à illustrer un filet. les lignes peuvent être dessiné dans n'importe quelle direction.
Ce que je souhaite c'est obtenir la taille de mes mailles ainsi formées. Il s'agit donc des zones blanches entre les différents traits....
Commenter la réponse de maxime0038
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
0
Merci
Haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...


Composants Cindy pour Delphi
Commenter la réponse de cs_MAURICIO
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Dernière intervention
5 avril 2012
0
Merci
Bonsoir

Je ne sais pas si j'ai tout compris mais bon, en supposant que :
[list]Tes lignes sont uniquement des droites.
Tu travailles sur une surface rectangulaire dont tu connais les dimensions./listTu peux alors mémoriser les coordonnées (en pixels, ou en valeurs réelles ) de départ et d'arrivée de chacune des lignes.

Ton problème se résume alors ( façon de parler, car ce n'est pas si simple qu'il n'y parait) à calculer les intersections de ces droites et donc d'obtenir les sommets des polygones de ton maillage afin d'en calculer leur aire.

De nombreux algo existent pour calculer les intersections de droites; regarde par exemple du côté de l'algo de Bentley-Ottman (voici quelques liens qui te seront peut être utiles, dans la langue de shakespeare bien souvent: ici, ici ou ici) et de façon plus générale pour un aperçu de différentes méthodes ici.

Il te faudra ensuite déterminer les polygones, puis leur aire; mais cela est une autre histoire...

N.B. Google est ton ami

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
Commenter la réponse de WhiteHippo
Messages postés
6
Date d'inscription
lundi 3 janvier 2011
Dernière intervention
15 juin 2011
0
Merci
Merci beaucoup. Ça fonctionne, j'ai utilisé FloodFill pour coloriser chacune des mailles d'une couleur différente puis ScanLine pour compter le nombre de pixels pour chacune des couleurs.
Commenter la réponse de maxime0038

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.