Bonjour,
Je récupère une image prise en perspective et souhaite lui redonner sa forme originale.
Pour cela, j'utilise le bout de code ci-dessous :
mon image d'origine est dans Dossard[j].img
Dans un souci de simplification, et parce que je ne comprenais pas pourquoi mon image résultante ne correspondait à rien, j'ai mis les mêmes valeurs de coordonnées pour les 2 images (dstTri[0].x=srcTri[0].x;...).
J'ai pensé dans ce cas que l'image donnée par cvWarpAffine serait exactement celle d'origine. Mais ce n'en est pas le cas, et c'est cela qui vient me faire demander un peu d'aide .
L'image d'origine est un rectangle de 54 pixel de large sur 56 pixel de haut) contenant 4 chiffres prise en photo légèrement de biais
L'image résultante est une image uniforme blanc crème (note : je remarque que la couleur correspond au premier pixel de l'image d'origine. Hasard ?)
Est ce que quelqu'un saurait pourquoi est ce que j'ai ce résultat et ce que je fais de mal ?
Merci d'avance de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 CvPoint2D32f srcTri[4], dstTri[4]; CvMat* warp_mat = cvCreateMat(2,3,CV_32FC1); IplImage *src, *dst; src = cvCloneImage( Dossard[j].img ); src->origin = Dossard[j].img->origin; dst = cvCloneImage( src ); dst->origin = src->origin; srcTri[0].x=0;srcTri[0].y=0; srcTri[1].x=src->width;srcTri[1].y=0; srcTri[2].x=src->width;srcTri[2].y=src->height; srcTri[3].x=0;srcTri[3].y=src->height; dstTri[0].x=srcTri[0].x;dstTri[0].y=srcTri[0].y; dstTri[1].x=srcTri[1].x;dstTri[1].y=srcTri[1].y; dstTri[2].x=srcTri[2].x;dstTri[2].y=srcTri[2].y; dstTri[3].x=srcTri[3].x;dstTri[3].y=srcTri[3].y; for (k=0;k<4;k++) { printf("%f %f\n",srcTri[k].x,srcTri[k].y); } cvGetPerspectiveTransform(srcTri, dstTri, warp_mat); cvWarpAffine( src, dst, warp_mat , CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS , cvScalarAll(0) ); cvSaveImage(buf2,dst,0);
Partager