仿射变换

来源:互联网 发布:淘宝手机卡实名流程 编辑:程序博客网 时间:2024/04/29 06:08

#ifdef _CH_
#pragma package<opencv>
#endif

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

#include <cv.h>
#include <cvcam.h>
#include <cxcore.h>
#include <highgui.h>

void main()
{
 //载入图像
 IplImage *src_image=cvLoadImage("1.jpg");
 assert(src_image!=NULL);

 IplImage *dst_image=cvCreateImage(cvGetSize(src_image),src_image->depth,src_image->nChannels);
 assert(dst_image!=NULL);

 //定义所需资源
 CvPoint2D32f srcTri[3],dstTri[3];
 CvMat *rot_mat = cvCreateMat(2,3,CV_32FC1);
 CvMat *warp_mat = cvCreateMat(2,3,CV_32FC1);

 //拷贝图像并清0
 cvCopyImage(src_image,dst_image);
 dst_image->origin = src_image->origin;
 cvSetZero(dst_image);
 
 //接下来要做的是获得所需要的地图矩阵
 srcTri[0].x = 0;        //左上
 srcTri[0].y = 0;

 srcTri[1].x = src_image->width-1;    //左右
 srcTri[1].y = 0;

 srcTri[2].x = 0;        //左下
 srcTri[2].y = src_image->height -1;

 dstTri[0].x = src_image->width *0.0;   //左上
 dstTri[0].y = src_image->height *0.0;

 dstTri[1].x = src_image->width *0.85;   //右上
 dstTri[1].y = src_image->height *0.105;   

 dstTri[2].x = src_image->width *0.12;   //左下
 dstTri[2].y = src_image->height *0.89;
 
 //调用函数获得矩阵地图
 cvGetAffineTransform(srcTri,dstTri,warp_mat);

 //执行仿射变换
 cvWarpAffine(src_image,dst_image,warp_mat);


 //接下来要做的是执行角度变化
 cvCopyImage(dst_image,src_image);

 CvPoint2D32f center=cvPoint2D32f( src_image->width/2,src_image->height/2 );  //旋转中心 
  
 double angle = -50.0;               //旋转角度
 double scale =0.6;                //缩放比例

 //获得地图矩阵
 cv2DRotationMatrix(center,angle,scale,rot_mat);

 //执行仿射变换
 cvWarpAffine(src_image,dst_image,rot_mat);

 //创建窗口
 cvNamedWindow("Show_Src");
 cvNamedWindow("Show_Dst");

 //显示图像
 cvShowImage("Show_Src",src_image);
 cvShowImage("Show_Dst",dst_image);

 cvWaitKey();
 
 //释放资源
 cvReleaseImage(&src_image);
 cvReleaseImage(&dst_image);
 cvDestroyWindow("Show_Src");
 cvDestroyWindow("Show_Dst");

 

}

原创粉丝点击