您的位置:首页 > 其它

cvWarpAffine:仿射变换

2011-10-07 14:03 585 查看
 右图中先通过创建点(平行四边形的顶点)的两个三元数组,然后利用cvGetAffineTransform()将其转换为具体的变换矩阵,从而得到cvWarpAffine()的矩阵参数。接下来,做一次仿射变换,紧接着将图像旋转。
#include "cv.h"

#include "highgui.h"

int _tmain(int argc, _TCHAR* argv[])

{

   CvPoint2D32f srcTri[3],dstTri[3];

   CvMat* rot_mat=cvCreateMat(2,3,CV_32FC1);

   CvMat* warp_mat=cvCreateMat(2,3,CV_32FC1);

   IplImage *src,*dst;

   if(argc==2 && ((src=cvLoadImage(argv[1],1))!=0))

   {

      dst=cvCloneImage(src);

      dst->origin =src->origin ;

      cvZero(dst);

      //compute warp matrix

      srcTri[0].x =0;                            //src top left

      srcTri[0].y=0;

      srcTri[1].x =src->width -1;         //src top right

      srcTri[1].y=0;

      srcTri[2].x=0;                            //src bottom left offset

      srcTri[2].y=src->height -1;

      dstTri[0].x=src->width *0.0;       //dst top left

      dstTri[0].y=src->height *0.33;

      dstTri[1].x=src->width *0.85;     //dst top right

      dstTri[1].y=src->height *0.25;

      dstTri[2].x=src->width *0.15;     //dst bottom left offset

      dstTri[2].y=src->height *0.7;

      cvGetAffineTransform(srcTri,dstTri,warp_mat);

      cvWarpAffine(src,dst,warp_mat);

      cvCopy(dst,src);

      //compute rotation matrix

      CvPoint2D32f center=cvPoint2D32f(src->width /2,src->height /2);

      double angle=-50.0;

      double scale=0.6;

      cv2DRotationMatrix(center,angle,scale,rot_mat);

      //do the transformation

      cvWarpAffine(src,dst,rot_mat);

      cvNamedWindow("Affine_Transform",1);

      cvShowImage("Affine_Transform",dst);

      cvWaitKey();

    }

   cvReleaseImage(&dst);

   cvReleaseMat(&rot_mat);

   cvReleaseMat(&warp_mat);

   return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dst transformation matrix