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

Résolu
tima20 - 10 mars 2013 à 11:42
 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);
}
}

2 réponses

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);
}
3
la taille de l image noir est plus grand que l'image a traiter
0
Rejoignez-nous