zoukankan      html  css  js  c++  java
  • openCv 图像顺时针、逆时针旋转

    通过下面这个函数调用

    Rotate90(workImg,270); //顺时针旋转

    Rotate90(workImg,90); //逆时针旋转

    实现,其实用该函数旋转任意度数对正方形图都ok,只是长方形图旋转后会有拉伸部分,不好掌握新图的长宽。

    void Rotate90(IplImage *workImg,int angle)
    {
        int opt = 0;                            //  1: 加缩放   0: 仅旋转
        double factor;                          //  缩放因子
        IplImage *pImage;
        IplImage *pImgRotation = NULL;
    
        pImage = workImg;
        pImgRotation = cvCloneImage(workImg);
    
        angle=-angle;
    
        //  创建 M 矩阵
        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 = workImg->height;
        int h = workImg->width;
    
        if (opt) factor = (cos(angle*CV_PI/180.)+1.0)*2;
        else factor = 1;
    
        m[0] = (float)(factor*cos(-angle*CV_PI/180.));
        m[1] = (float)(factor*sin(-angle*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(pImgRotation);
        cvGetQuadrangleSubPix(pImage,pImgRotation,&M);
        //---------------------------------------------------------
    
        cvNamedWindow("Rotation Image");
        cvFlip(pImgRotation);
        cvShowImage("Rotation Image",pImgRotation);
    
        cvReleaseImage( &pImgRotation );
        cvWaitKey(0);
    
        cvDestroyWindow("Rotation Image");
    }

    from: http://blog.csdn.net/abcjennifer/article/details/7269968

  • 相关阅读:
    H
    G
    hdu1430魔板
    1104. Don’t Ask Woman about Her Age(数论)
    bellman_ford寻找平均权值最小的回路
    bellman_ford算法
    强联通块tarjan算法
    割点算法
    字符串的最小表示法
    扩展KMP
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/5374089.html
Copyright © 2011-2022 走看看