透视变换

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

#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=cvCloneImage(src_image);
 assert(dst_image!=NULL);

 //所需点元素
 CvPoint2D32f srcQuad[4],dstQuad[4];

 //矩阵地图
 CvMat *warp_matrix=cvCreateMat(3,3,CV_32FC1);
 assert(warp_matrix!=NULL);

 dst_image->origin=src_image->origin;
 cvSetZero(dst_image);

 srcQuad[0].x = 0;        //左上
 srcQuad[0].y = 0;

 srcQuad[1].x = src_image->width-1;    //右上
 srcQuad[1].y = 0;

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

 srcQuad[3].x = src_image->width -1;    //右下
 srcQuad[3].y = src_image->height -1;

 dstQuad[0].x = src_image->width *0.05;   //左上
 dstQuad[0].y = src_image->height *0.33;

 dstQuad[1].x = src_image->width* 0.9;   //右上
 dstQuad[1].y = src_image->height* 0.25;

 dstQuad[2].x = src_image->width* 0.2;   //左下
 dstQuad[2].y = src_image->height* 0.7;

 dstQuad[3].x = src_image->width* 0.8;   //右下
 dstQuad[3].y = src_image->height* 0.9;


 //获得地图矩阵
 cvGetPerspectiveTransform(srcQuad,
       dstQuad,
       warp_matrix
  );

 //执行透视变换
 cvWarpPerspective(src_image,dst_image,warp_matrix);

 //创建窗口
 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");
}