bonjour j'ai des difficultes pour charger une image bmp et la lire pixel par pixel
car cette etape me permet de faire une segmentation d'image satilitaire
bonjour j'ai des difficultes pour charger une image bmp et la lire pixel par pixel
car cette etape me permet de faire une segmentation d'image satilitaire
Salut,
quel est le code que tu as fait?
Où se trouve le problème?
Il faut utiliser la méthode Pixel du TImage:
Il existe aussi la méthode ScanLine, qui est plus rapide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int R = (Image->Canvas->Pixels[i][j]&0xFF0000)>>16, G = (Image->Canvas->Pixels[i][j]&0x00FF00)>>8, B = (Image->Canvas->Pixels[i][j]&0x0000FF);
Salut !
Je te conceil vivement d'utiliser la méthode ScanLine qui beacoups plus rapide, et moins gourmante que la première méthode.
Tu trouvera plein d'exemples sur ce forum; Handerson n'as pas céssé d'en contribuer...
A+
Pour charger une image Bmp :
et pour lire un pxl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Image1 -> Picture -> LoadFromFile("c:\\monimage.bmp") ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Tu utilise soit ScanLine soit Image1 -> Canvas -> Pixels[Colonne][Ligne] ; // tu aurra les valeurs en couleurs
Salut !
Une dernière fois :
On suppose ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class jPixel { public : Byte Blue; Byte Green; Byte Red; };
On aura donc ceci à faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 AnsiString Filename; //chemin complet du bitmap Graphics::TBitmap *Bitmap = new Graphics::TBitmap; //ne pas oublier de le détruire
L'accès aux composantes (R,G,B) est simple et rapide :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Bitmap->LoadFromFile(Filename); Bitmap->PixelFormat = pf24bit; // convertir en 24 bits
=======================
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 jPixel *Line; for(int y = 0; y < Bitmap->Height; y++) { Line = (jPixel*)Bitmap->ScanLine[y]; for(int x = 0; x < Bitmap->Width; x++) { ...Line[x].Red... ...Line[x].Green... ...Line[x].Blue... } }
BITMAPS COULEURS 8 BITS
=======================
On peut convertir les bitmaps 8 bits en 24 bits, ce qui est une solution de facilité mais qui nécessite plus de ressources mémoire.
Le traitement sur un bitmap 8 bits est par contre totalement différent puisque chaque pixel (vu par ScanLine) correspond à l'index d'une couleur dans la palette.
Dans ce cas précis, comme il n'y a que 256 teintes possibles, il suffit de les récupérer dans un tableau.
On y gagnera énormément, en lieu et place de Pixels[x][y] effectué sur l'intégralité du bitmap 8 bits.
On déclare :
Exemple de code pour récupérer les 256 teintes de la palette d'un bitmap :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PALETTEENTRY Colors[256];
On accèdera aux composantes RGB en faisant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Graphics::TBitmap *Bitmap = Image1->Picture->Bitmap; //pour montrer que... GetPaletteEntries(Bitmap->Palette, 0, 256, Colors); // récupération des 256 couleurs
Ce qui évitera de solliciter les GetR, GetG et GetBValue suite à Pixels[x][y] !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 PALETTEENTRY color; Byte *Line; ... Line = (Byte*)Bitmap->ScanLine[y]; ... color = Colors[ Line[x] ]; ...color.peRed ...color.peGreen ...color.peBlue
Pour tout ce qui concerne le traitement d'images on a intérêt à aller dans le sens de la rapidité d'exécution et non dans celle de la rédaction du code !
A plus !
Ne serais pas de lancer un sous forum c++Builder pour le traitement d'image ?
Salut !
Il y a pas mal de choses sur le forum Algorithmes -> Traitement d'images !
A plus !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager