[opencv]comment je peux déplacer une squelette dans une image à une certaine pos [Résolu]

tima20 - 10 mars 2013 à 11:42 - Dernière réponse :  tima20
- 13 mars 2013 à 12:00
Bonjour ^_^
j ai un pb dans mon projet , j ai calculer le centre de gravité d'une image(squelette blanc et le font noir) et j ai une autre image noir , elle a un autre centre de gravité et je veux copier l'image1 dans l image noir tell que le centre de gravité sera le meme
veux dir il faux que je décale l image1 pour placer son centre de gravité sur le centre de gravité de l image noir
j'espère vraiment de m aider
les 2 images sont de meme taille
//////////////////////////mon code/////////////////////////////
IplImage* img_enca3 = cvLoadImage("noir.png");
noir=centreGravite2(img_enca3);
cvDestroyAllWindows ();
for(int i=0;i<nbFrames;i++)
{
sprintf(run4,"%s_%d",chaine3,i);
strcat(run4,".png");
IplImage* img2 = cvLoadImage(run4);
nv=centreGravite1(img2,i);
minx=minX(img2);
maxx=maxX(img2);
miny=minY(img2);
maxy=maxY(img2);

sub.xg=noir.xg-nv.xg;
sub.yg=noir.yg-nv.yg;
cout<<"sub.xg="<<sub.xg<<endl;
cout<<"sub.yg="<<sub.yg<<endl;
IplImage* img_enca = cvCreateImage (cvGetSize(img_enca3),IPL_DEPTH_8U,1);

for(int o=0,k=sub.xg;o<nc,k<nc;o++,k++) {
for(int j=0,l=sub.yg;j<nl,l<nl;j++,l++)
{ pixel=cvGet2D(img2,o,j);

cvSet2D(img_enca,k,l,pixel);
}
}


// cvSetImageROI(img_enca3, cvRect(0,0,nl,nc)) ;
cvNamedWindow("redim");
// cvShowImage("redim",img_enca3);
/* list[i] = cvCreateImage(cvGetSize(img_enca3),IPL_DEPTH_8U,1);
cvCopy(img_enca3 ,list[i]); // list[o]=img_enca;
*/ sprintf(run5,"%s_%d",chaine4,i);
strcat(run5,".png");
// cvNamedWindow("redim");
cvShowImage("redim",img_enca);
cvSaveImage (run5, img_enca);
}


je c'est que l erreur est dans la boucle :
for(int o=0,k=0+sub.xg;o<nc,k<nc;o++,k++) {
for(int j=0,l=0+sub.yg;j<nl,l<nl;j++,l++)
{ pixel=cvGet2D(img2,o,j);

cvSet2D(img_enca,k,l,pixel);
}
}
Afficher la suite 

2 réponses

Répondre au sujet
+3
Utile
c BON j ai régler le problème
et voilà :

for(int i=0;i<nbFrames;i++)
{
IplImage* img_enca3 = cvLoadImage("noir3.png");
noir=centreGravite2(img_enca3);

sprintf(run4,"%s_%d",chaine3,i);
strcat(run4,".png");
IplImage* img2 = cvLoadImage(run4);
nv=centreGravite1(img2,i);
maxx=maxX(img2);
maxy=maxY(img2);

sub.xg=noir.xg-nv.xg;
sub.yg=noir.yg-nv.yg;


cout<<"sub.xg="<<sub.xg<<endl;
cout<<"sub.yg="<<sub.yg<<endl;
for(int o=0;o<maxx;o++)
{for(int j=0;j<maxy;j++)
{ pixel=cvGet2D(img2,o,j);
if(pixel.val[0] ==255 )
cvSet2D(img_enca3,o+sub.xg,j+sub.yg,pixel);
}
}

// cvSetImageROI(img_enca3, cvRect(0,0,nl,nc)) ;
cvNamedWindow("redim");
// cvShowImage("redim",img_enca3);
/* list[i] = cvCreateImage(cvGetSize(img_enca3),IPL_DEPTH_8U,1);
cvCopy(img_enca3 ,list[i]); // list[o]=img_enca;
*/ sprintf(run5,"%s_%d",chaine4,i);
strcat(run5,".png");
// cvNamedWindow("redim");
cvShowImage("redim",img_enca3);
cvSaveImage (run5, img_enca3);
// cvReleaseImage (&img_enca3);
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de tima20
0
Utile
la taille de l image noir est plus grand que l'image a traiter
Commenter la réponse de tima20

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.