rotate.cpp
上传用户:banwdc
上传日期:2016-06-25
资源大小:2871k
文件大小:1k
源码类别:

OpenCV

开发平台:

Visual C++

  1. #include "cv.h"
  2. #include "highgui.h"
  3. #include "math.h"
  4. int main( int argc, char** argv )
  5. {
  6. IplImage* src;
  7. /* the first command line parameter must be image file name */
  8. if( argc==2 && (src = cvLoadImage(argv[1], -1))!=0)
  9. {
  10. IplImage* dst = cvCloneImage( src );
  11. int  delta = 1;
  12. int  angle = 0;
  13.         int opt = 1;   // 1: 旋转加缩放
  14.                        // 0:  仅仅旋转
  15.         double factor;
  16.         cvNamedWindow( "src", 1 );
  17. cvShowImage( "src", src );
  18. for(;;)
  19. {
  20. float m[6];
  21.             // Matrix m looks like:
  22.             //
  23.             // [ m0  m1  m2 ] ===>  [ A11  A12   b1 ]
  24.             // [ m3  m4  m5 ]       [ A21  A22   b2 ]
  25.             // 
  26. CvMat M = cvMat( 2, 3, CV_32F, m );
  27. int w = src->width;
  28. int h = src->height;
  29. if(opt) // 旋转加缩放
  30.                 factor = (cos(angle*CV_PI/180.) + 1.05)*2;
  31.             else //  仅仅旋转
  32.                 factor = 1;
  33. m[0] = (float)(factor*cos(-angle*2*CV_PI/180.));
  34. m[1] = (float)(factor*sin(-angle*2*CV_PI/180.));
  35. m[3] = -m[1];
  36. m[4] = m[0];
  37. // 将旋转中心移至图像中间
  38.             m[2] = w*0.5f;  
  39. m[5] = h*0.5f;  
  40.             //  dst(x,y) = A * src(x,y) + b
  41. cvGetQuadrangleSubPix( src, dst, &M);
  42. cvNamedWindow( "dst", 1 );
  43. cvShowImage( "dst", dst );
  44. if( cvWaitKey(5) == 27 )
  45. break;
  46. angle =(int) (angle + delta) % 360;
  47. } // for-loop
  48. }
  49. return 0;
  50. }