Monday, August 01, 2005

OpenCV: rotate and resize image

This one uses version beta5. Function cvGetQuadrangleSubPix( src, dst, &M) has 3 parameters instead of 5 in version4.

1. rotate, scale and border padding.

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

int main( int argc, char** argv )
{
IplImage* src;
/* the first command line parameter must be image file name */
//if( argc==2 && (src = cvLoadImage(argv[1], -1))!=0)
{ 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;

m[0] = (float)(factor*cos(-angle*2*CV_PI/180.));
m[1] = (float)(factor*sin(-angle*2*CV_PI/180.));
m[2] = w*0.5f;
m[3] = -m[1];
m[4] = m[0];
m[5] = h*0.5f;

cvGetQuadrangleSubPix( src, dst, &M);

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

if( cvWaitKey(5) == 27 )
break;

angle = (angle + delta) % 360;
}
}
return 0;
}


2. rotate and the scale factor is 1.


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

int main( int argc, char** argv )
{
IplImage* src;
/* the first command line parameter must be image file name */
//if( argc==2 && (src = cvLoadImage(argv[1], -1))!=0)
{ src = cvLoadImage("lena.jpg");
IplImage* dst = cvCloneImage( src );
int delta = 1;
int angle = 20;
float m[6];
double factor;
CvMat M;

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

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

m[0] = (float)(factor*cos(-angle*2*CV_PI/180.));
m[1] = (float)(factor*sin(-angle*2*CV_PI/180.));
m[2] = w*0.5f;
m[3] = -m[1];
m[4] = m[0];
m[5] = h*0.5f;

cvGetQuadrangleSubPix( src, dst, &M);

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

if( cvWaitKey(5) == 27 )
break;

angle = (angle + delta) % 360;
}

cvGetQuadrangleSubPix( src, dst, &M);
cvNamedWindow( "dst2", 1 );
cvShowImage( "dst2", dst );
cvWaitKey(0);
}
return 0;
}


Resize: Same size as dst. method(NN, cubic...), the function can be found at former post(Jan.28,2005)


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

int main( int argc, char** argv )
{
IplImage* src;
src = cvLoadImage("lena.jpg");
IplImage* dst;
dst = cvCreateImage( cvSize(156,156), 8, 3 );
cvResize( src, dst, CV_INTER_LINEAR );

cvNamedWindow( "src", 1 );
cvShowImage( "src", src );
cvNamedWindow( "dst", 1 );
cvShowImage( "dst", dst );
cvWaitKey(0);

return 0;
}

No comments:

Post a Comment