opencv——(动态)旋转图像

#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <opencv\cv.h>
#include <iostream>
#include<string>
#include <windows.h>
using namespace std;
using namespace cv;


int _tmain(int argc, _TCHAR* argv[])
{
    
    
    IplImage *src = cvLoadImage("lena.jpg");
    IplImage *dst = 0;

    /* the first command line parameter must be image file name */
    if (src != 0)
    {
        int delta = 1;
        int angle = 45;
        int opt =0;        // 1: 旋转加缩放
        // 0:  仅仅旋转
        double factor;

        dst = cvCloneImage (src);
        cvNamedWindow ("src", 1);
        cvShowImage ("src", src);
                
        for (;;)
        {
            float m[6];
            // Matrix m looks like:
            //
            // [ m0  m1  m2 ] ===>  [ A11  A12   b1 ]
            // [ m3  m4  m5 ]       [ A21  A22   b2 ]
            //
            CvMat M = cvMat (2, 3, CV_32F, m);
            int w = src->width;
            int h = src->height;
            if (opt)        // 旋转加缩放
                factor = (cos (angle * CV_PI / 180.) + 1.0) * 2;
            else            //  仅仅旋转
                factor = 1;
            m[0] = (float) (factor * cos (-angle * 2 * CV_PI / 180.));
            m[1] = (float) (factor * sin (-angle * 2 * CV_PI / 180.));
            m[3] = -m[1];
            m[4] = m[0];
            // 将旋转中心移至图像中间
            m[2] = w * 0.5f;
            m[5] = h * 0.5f;
            //  dst(x,y) = A * src(x,y) + b
            cvZero (dst);
            cvGetQuadrangleSubPix (src, dst, &M);
            cvNamedWindow ("dst", 1);
            cvShowImage ("dst", dst);
            if (cvWaitKey (1) == 27)    //ESC
                break;
            angle = (int) (angle + delta) % 360;
        }            // for-loop
    }
    return 0;

}

             

posted @ 2013-12-29 15:54  nanyangzp  阅读(582)  评论(0编辑  收藏  举报