Surface d'une zone à partir de sa couleur sur un bitmap

Résolu
maxime0038 Messages postés 6 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 15 juin 2011 - 3 janv. 2011 à 18:50
maxime0038 Messages postés 6 Date d'inscription lundi 3 janvier 2011 Statut Membre 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.

6 réponses

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
4 janv. 2011 à 00:27
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
3
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
4 janv. 2011 à 10:22
Salut,

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

ici :
Composants Cindy pour Delphi

Télécharge la démo,

A+
0
maxime0038 Messages postés 6 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 15 juin 2011
4 janv. 2011 à 11:24
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....
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
4 janv. 2011 à 11:36
Haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...


Composants Cindy pour Delphi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
5 janv. 2011 à 01:10
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
0
maxime0038 Messages postés 6 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 15 juin 2011
5 janv. 2011 à 09:14
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.
0
Rejoignez-nous