#include<>
#include<>
using namespace std;
int main(void){
CvPoint2D32f srcTri[3], dstTri[3];
//量化矩阵的创建
//旋转
CvMat* rot_mat = cvCreateMat(2, 3, CV_32FC1);
//扭曲
CvMat* warp_mat = cvCreateMat(2, 3, CV_32FC1);
IplImage *src, *dst;
src = cvLoadImage("d:\\testPic\\");
if(src != 0){
//为dst申请空间,类似使用cvCreateImage();
dst = cvCloneImage(src);
dst->origin = src->origin;
cvZero(dst);
//compute warp matrix
//在原图上确定一个三角形,再确定映射到目标图像上的三角形
srcTri[0].x = 0;
srcTri[0].y = 0;
srcTri[1].x = src->width - 1;
srcTri[1].y = 0;
srcTri[2].x = 0;
srcTri[2].y = src->height - 1;
dstTri[0].x = src->width * 0.0;
dstTri[0].y = src->height * 0.33;
dstTri[1].x = src->width * 0.85;
dstTri[1].y = src->height * 0.25;
dstTri[2].x = src->width * 0.15;
dstTri[2].y = src->height * 0.7;
//获取量化矩阵
cvGetAffineTransform(srcTri, dstTri, warp_mat);
//仿射变换
cvWarpAffine(src, dst, warp_mat);
cvNamedWindow("Affine_Transform", 1);
cvShowImage("Affine_Transform", dst);
cvWaitKey();
cvCopy(dst, src);
//compute rotation matrix
//获取旋转中心
CvPoint2D32f center = cvPoint2D32f(src->width / 2, src->height / 2);
//旋转角度
double angle = 90.0;
//扩展比例
double scale = 1;
//获取量化矩阵
cv2DRotationMatrix(center, angle, scale, rot_mat);
//仿射变换
cvWarpAffine(src, dst, rot_mat);
cvShowImage("Affine_Transform", dst);
cvWaitKey();
}
cvReleaseImage(&dst);
cvReleaseMat(&rot_mat);
cvReleaseMat(&warp_mat);
return 0;
}