Je n'arrive pas a trouver de fonction sous openCV effectuant une simple rotation d'image? En existe t'il une (se qui semblerait plus que normal )
Merci
Version imprimable
Je n'arrive pas a trouver de fonction sous openCV effectuant une simple rotation d'image? En existe t'il une (se qui semblerait plus que normal )
Merci
Pour ton problème de rotation :
cv2DRotationMatrix() and cvWarpAffine()
(2×3 transformation matrix pour le premier notamment)
car dans tous les cas, il faudra que tu écrives ta rotation sous la forme de matrice de transformation affine
Toujours bloqué sur ma rotation, j'ai trouvé ce code qui fonctionne très bien :
C'est super mais alors quand je veux en faire une fonction en stabilisant à un angle donné, j'arrive à un résultat abérant où l'image est à moitié coupéeCode:
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
29
30
31
32
33
34
35
36
37
38 #include "cv.h" #include "highgui.h" #include "math.h" int main( int argc, char** argv ) { IplImage* src = cvLoadImage("lena.jpg", 1); IplImage* dst = cvCloneImage( src ); int delta = 1; int angle = 0; cvNamedWindow("src", 1); cvShowImage("src", src); for(;;) { float m[6]; CvMat M = cvMat(2, 3, CV_32F, m); int w = src->width; int h = src->height; m[0] = (float)(cos(angle*2*CV_PI/180.)); m[1] = (float)(sin(angle*2*CV_PI/180.)); m[3] = -m[1]; m[4] = m[0]; m[2] = w*0.5f; m[5] = h*0.5f; cvGetQuadrangleSubPix( src, dst, &M); cvNamedWindow("dst", 1); cvShowImage("dst", dst); if( cvWaitKey(1) == 27 ) break; angle =(int)(angle + delta) % 360; } return 0; }
Enfin !!! Wahouuu !!!
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void RotationImage(IplImage* iBuf, IplImage** oBuf, int angle) { IplImage* lTamp = cvCloneImage(iBuf); float lRotateValues[6]; lRotateValues[0] = (float)(cos(angle*CV_PI/180.)); lRotateValues[1] = (float)(sin(angle*CV_PI/180.)); lRotateValues[3] = -lRotateValues[1]; lRotateValues[4] = lRotateValues[0]; lRotateValues[2] = iBuf->width *0.5f; lRotateValues[5] = iBuf->height *0.5f; CvMat lRotateMatrix = cvMat(2, 3, CV_32F, lRotateValues); cvGetQuadrangleSubPix(iBuf,lTamp,&lRotateMatrix); *oBuf = lTamp; }