2016年3月15日 星期二

Resize and Rotate Image using OpenCV

Resize and Rotate Image using OpenCV

有時候需要對影像做旋轉、縮放時,可以透過簡單的數學運算可得到結果。
OpenCV有提供cvGetQuadrangleSubPix讓開發者自行調整影像的變化程度。

範例環境:
- Visual Studio 2010
- Windows 7
- OpenCV 2.4.5

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

void main() {
    IplImage * pImgSrc = cvLoadImage("lena.jpg", 1);
    IplImage * pImgDst = NULL;
    if (pImgSrc) {
        int delta = 1; //旋轉速度
        int angle = 0; //旋轉角度
        int option = 0; // 1代表旋轉加縮放 ; 0代表僅僅旋轉
        double factor;

        pImgDst = cvCloneImage(pImgSrc);
        cvShowImage("Show Image", pImgSrc);
        while (1) {
            float m[6];
            // [ m0  m1  m2 ] ===>  [ A11  A12   b1 ]
            // [ m3  m4  m5 ]       [ A21  A22   b2 ]
            CvMat M = cvMat(2, 3, CV_32F, m);
            if (option)
                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] = pImgSrc - > width * 0.5 f;
            m[5] = pImgSrc - > height * 0.5 f;
            //將旋轉中心移至圖像中間

            cvZero(pImgDst); //每旋轉一次角度就更新影像
            cvGetQuadrangleSubPix(pImgSrc, pImgDst, & M);
            cvShowImage("Show Rotation", pImgDst);
            cvWaitKey(1);
            angle = (int)(angle + delta) % 360; //更新旋轉角度
        }
    }
}

編譯成功後,Show Rotation視窗會一直旋轉lena影像

更多OpenCV文章請參考:OpenCV Tutorial (學習筆記)

0 意見:

張貼留言