图像的旋转 OpenCV

#include "cv.h"
#include "highgui.h"
#include "math.h"
#include<stdio.h>
int main( int argc, char** argv )
{
 IplImage* src;
 /* the first command line parameter must be image file name */
 if( (src = cvLoadImage(".\\1q.png", -1)))
 {
  printf("sdfs");
  IplImage* dst = cvCloneImage( src );
  int  delta = 1;
  int  angle = 0;
        int opt = 0;   // 1: 旋转加缩放
                       // 0:  仅仅旋转
        double factor;
        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.05)*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
   cvGetQuadrangleSubPix( src, dst, &M);
   cvNamedWindow( "dst", 1 );
   cvShowImage( "dst", dst );
   if( cvWaitKey(85) == 27 )
    break;
   angle =(int) (angle /*+ delta*/) % 360;
  } // for-loop
 }
 return 0;
}



 

    

GetQuadrangleSubPix

提取象素四边形,使用子象素精度

void cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst, const CvMat* map_matrix );
src
输入图像.
dst
提取的四边形.
map_matrix
3 × 2 变换矩阵 [A|b] (见讨论).

函数 cvGetQuadrangleSubPix 以子象素精度从图像 src 中提取四边形,使用子象素精度,并且将结果存储于 dst ,计算公式是:

dst(x + width(dst) / 2,y + height(dst) / 2) = src(A11x + A12y + b1,A21x + A22y + b2)

其中 A和 b 均来自映射矩阵(译者注:A, b为几何形变参数) ,映射矩阵为:

map\_matrix =  \begin{bmatrix} A_{11} & A_{12} & b_1 \\ A_{21} & A_{22} & b_2 \end{bmatrix}

其中在非整数坐标 A \cdot (x,y)^T+b 的象素点值通过双线性变换得到。当函数需要图像边界外的像素点时,使用重复边界模式(replication border mode)恢复出所需的值。多通道图像的每一个通道都单独计算。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值