Tuesday, August 02, 2005

OpenCV: rotate image(2)

Use Affin transform: cvWarpAffine()

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int main( int argc, char** argv )
{
IplImage* src;
src = cvLoadImage("lena.jpg");
IplImage* dst = cvCloneImage( src );
int delta = 1;
int angle = 0;

cvNamedWindow( "src", 1 );
cvShowImage( "src", src );

for(;;)
{
float m[6];
double factor = (cos(angle*CV_PI/180.) + 1.1)*3;
CvMat M = cvMat( 2, 3, CV_32F, m );
int w = src->width;
int h = src->height;

cv2DRotationMatrix( cvPoint2D32f(w*0.5f,h*0.5f), angle,
1./factor, &M );
cvWarpAffine( src, dst, &M,
CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, cvScalarAll(0));
cvNamedWindow( "dst", 1 );
cvShowImage( "dst", dst );
if( cvWaitKey(5) == 27 )
break;
angle = (angle + delta) % 360;
}


return 0;
}

No comments:

Post a Comment