Squelettisation image

Résolu/Fermé
paul1004 Messages postés 2 Date d'inscription mercredi 9 mars 2016 Statut Membre Dernière intervention 10 mars 2016 - 10 mars 2016 à 10:25
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 10 mars 2016 à 17:59
Bonjour
j'ai besoin d'un programme en c++ qui permet de réaliser la squelettisation d'une image pour ensuite la sauvegarder. J'espère que quelqu'un peut m'aider.
merci bien

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 mars 2016 à 12:03
Bonjour.

Comme dit dans le règlement, nous ne faisons ni le travail, ni les recherches, ni la réflexion à la place du demandeur. En revanche, nous aidons avec grand plaisir à corriger un code ou à aider la conception d'une architecture de code existante que tu proposerais (et qui serait déjà finalisé, juste un besoin de relecture). C'est ici un site d'aide aux développeurs passionnés par des développeurs passionnés qui cherchent à améliorer leurs codes et non un site de service, ou l'on réalise un produit fini à la demande.

Je t'invite donc à poster ton code (dans des balises de code) et à indiquer ce qui te bloque très précisément.
0
paul1004 Messages postés 2 Date d'inscription mercredi 9 mars 2016 Statut Membre Dernière intervention 10 mars 2016
Modifié par cptpingu le 10/03/2016 à 13:54
J'ai récupéré et modifié un code réalisé sous c++builder
Et je souhaite l'adapter pour faire le projet sous visual studio mais je n'y arrive pas.

void ImageToMatrice(TImage *img,byte mat[3000][3000])  //Lecture

void MatriceToImage(TImage *img,byte mat[3000][3000]) //Affichage

//Coeur programme (algorythme de squeletisation)
void __fastcall TForm1::Button2Click(TObject *Sender)
{

int H=Image2->Picture->Bitmap->Height;
int W=Image2->Picture->Bitmap->Width;
int Bp,Ap1,Ap2,Ap4;
int nombreiteration=10;


ImageToMatrice(Image2,matrice);//Chargement de l'image dans "matrice"


for (int i=1;i<=nombreiteration; i++)
{
for(int x=2;x<W-2;x++)
for(int y=2;y<H-2;y++)
{
Bp=0;
Ap1=0;
Ap2=0;
Ap4=0;

if (matrice[x-1][y-1]==0)Bp=Bp+1;
if (matrice[x-1][y]==0)Bp=Bp+1;
if (matrice[x-1][y+1]==0)Bp=Bp+1;
if (matrice[x][y+1]==0)Bp=Bp+1;
if (matrice[x+1][y+1]==0)Bp=Bp+1;
if (matrice[x+1][y]==0)Bp=Bp+1;
if (matrice[x+1][y-1]==0)Bp=Bp+1;
if (matrice[x][y-1]==0)Bp=Bp+1;


if (matrice[x-1][y]==255 && matrice[x-1][y+1]==0)Ap1=Ap1+1;
if (matrice[x-1][y+1]==255 && matrice[x][y+1]==0)Ap1=Ap1+1;
if (matrice[x][y+1]==255 && matrice[x+1][y+1]==0)Ap1=Ap1+1;
if (matrice[x+1][y+1]==255 && matrice[x+1][y]==0)Ap1=Ap1+1;
if (matrice[x+1][y]==255 && matrice[x+1][y-1]==0)Ap1=Ap1+1;
if (matrice[x+1][y-1]==255 && matrice[x][y-1]==0)Ap1=Ap1+1;
if (matrice[x][y-1]==255 && matrice[x-1][y-1]==0)Ap1=Ap1+1;
if (matrice[x-1][y-1]==255 && matrice[x-1][y]==0)Ap1=Ap1+1;


if (matrice[x-2][y]==255 && matrice[x-2][y+1]==0)Ap2=Ap2+1;
if (matrice[x-2][y+1]==255 && matrice[x-1][y+1]==0)Ap2=Ap2+1;
if (matrice[x-1][y+1]==255 && matrice[x][y+1]==0)Ap2=Ap2+1;
if (matrice[x][y+1]==255 && matrice[x][y]==0)Ap2=Ap2+1;
if (matrice[x][y]==255 && matrice[x][y-1]==0)Ap2=Ap2+1;
if (matrice[x][y-1]==255 && matrice[x-1][y-1]==0)Ap2=Ap2+1;
if (matrice[x-1][y-1]==255 && matrice[x-2][y-1]==0)Ap2=Ap2+1;
if (matrice[x-2][y-1]==255 && matrice[x-2][y]==0)Ap2=Ap2+1;


if (matrice[x-1][y+1]==255 && matrice[x-1][y+2]==0)Ap4=Ap4+1;
if (matrice[x-1][y+2]==255 && matrice[x][y+2]==0)Ap4=Ap4+1;
if (matrice[x][y+2]==255 && matrice[x+1][y+2]==0)Ap4=Ap4+1;
if (matrice[x+1][y+2]==255 && matrice[x+1][y+1]==0)Ap4=Ap4+1;
if (matrice[x+1][y+1]==255 && matrice[x][y+1]==0)Ap4=Ap4+1;
if (matrice[x][y+1]==255 && matrice[x][y]==0)Ap4=Ap4+1;
if (matrice[x][y]==255 && matrice[x-1][y]==0)Ap4=Ap4+1;
if (matrice[x-1][y]==255 && matrice[x-1][y+1]==0)Ap4=Ap4+1;


if (Bp>=2 && Bp<=6 && Ap1==1)
{
if ((matrice[x-1][y]==255 && matrice[x][y+1]==255 && matrice[x][y-1]==255)|| (Ap2==1) )
{
if ((matrice[x-1][y]==255 && matrice[x][y+1]==255 && matrice[x+1][y]==255)|| (Ap4==1) )
{
matrice[x][y]=255;
}
}
}
}
}


MatriceToImage(Image2,matrice);//AFFICHAGE DU RESULTAT.
}



/declaration fichier h du fichier "h"

byte matrice[3000][3000];
void ImageToMatrice(TImage *img,byte mat[3000][3000])


{


class jPixel
{
public :
Byte Blue;
Byte Green;
Byte Red;
};
Graphics::TBitmap *Bitmap = new Graphics::TBitmap;




jPixel *Pixel;

int grey, blue, red, green;

Graphics::TBitmap *B = img->Picture->Bitmap;


for(int y = 0; y < B->Height; y++)
{
Pixel = (jPixel*)B->ScanLine[y];
for(int x = 0; x < B->Width; x++)
{

grey = (Pixel[x].Red+
Pixel[x].Green+
Pixel[x].Blue) /3;

mat[x][y]=grey;
}
}
img->Repaint();
}

void MatriceToImage(TImage *img,byte mat[3000][3000])
{
class jPixel
{
public :
Byte Blue;
Byte Green;
Byte Red;
};
Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
jPixel *Pixel;

int grey, blue, red, green;
Graphics::TBitmap *B ;

B=img->Picture->Bitmap;


for(int y = 0; y < B->Height; y++)
{
Pixel = (jPixel*)B->ScanLine[y];
for(int x = 0; x < B->Width; x++)
{

Pixel[x].Red=mat[x][y];
Pixel[x].Green=mat[x][y];
Pixel[x].Blue=mat[x][y];
}
}
img->Repaint();

}
.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 mars 2016 à 14:09
C'est normal que tu ne puisses pas l'utiliser sous Visual Studio, car ce qui pose problème ici, c'est l'utilisation du framework Borland. Il faut séparer le code qui fait de la "squelettisation", du code Borland qui n'est là que pour afficher une fenêtre.
Je t'invite donc à faire cette séparation et à compiler ton code. Une fois que ton code compilera, si le résultat obtenu n'est pas celui escompté, n'hésite pas à poster ton code finalisé.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 mars 2016 à 17:59
Visiblement, tu as "cross-posté" ta question partout en mode "bouteille à la mer":

De ce que l'on peut en résumer après lecture des différents threads (dont celui-ci):
  • Tu ne maîtrises pas les bases du C++.
  • On te demande un exercice à faire par toi même, et à la place tu "pompes" des codes que tu ne comprends pas.
  • Tu espères que quelqu'un te fera fonctionner ces codes pour les adapter à tes besoins.


Malheureusement, ça ne fonctionne pas comme cela. Les gens sur les forums ne sont pas dupes, et je doute fortement que tu trouves quelqu'un qui te fasse tes exercices à ta place.

Je ferme donc cette conversation.
0
Rejoignez-nous