Squelettisation image [Résolu/Fermé]

paul1004 2 Messages postés mercredi 9 mars 2016Date d'inscription 10 mars 2016 Dernière intervention - 10 mars 2016 à 10:25 - Dernière réponse : cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 6 octobre 2018 Dernière intervention
- 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
Afficher la suite 

4 réponses

cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 6 octobre 2018 Dernière intervention - 10 mars 2016 à 12:03
0
Merci
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.
paul1004 2 Messages postés mercredi 9 mars 2016Date d'inscription 10 mars 2016 Dernière intervention - Modifié par cptpingu le 10/03/2016 à 13:54
0
Merci
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();

}
.
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 6 octobre 2018 Dernière intervention - 10 mars 2016 à 14:09
0
Merci
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é.
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 6 octobre 2018 Dernière intervention - 10 mars 2016 à 17:59
0
Merci
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.

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.