#include <cv.h> #include <highgui.h> int main() { 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("5.jpg", 1); dst = cvCloneImage(src); dst->origin = src->origin; cvZero(dst); srcTri[0].x = 0; srcTri[0].y = 0; srcTri[1].x = src->width - 1.0; srcTri[1].y = 0; srcTri[2].x = 0; srcTri[2].y = src->height - 1.0; 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); //将源图像通过warp_mat映射到目标图像 cvNamedWindow("show", 1); cvShowImage("show", dst); cvNamedWindow("main", 1); cvShowImage("main", src); cvCopy(dst, src); CvPoint2D32f center = cvPoint2D32f(src->width / 2,src->height / 2); //中心点 double angle = -50.0; double scale = 0.6; cv2DRotationMatrix(center, angle, scale, rot_mat); //计算围绕点的旋转的映射矩阵和一个可选择的尺度 //参数分别表示 旋转中心 角度 缩放尺度 输出映射 cvWarpAffine(src, dst, rot_mat); //映射 cvNamedWindow("show1", 1); cvShowImage("show1", dst); cvWaitKey(); cvReleaseImage(&dst); cvReleaseImage(&src); cvDestroyAllWindows(); return 0; }
2.
#include <cv.h> #include <highgui.h> int main() { CvPoint2D32f srcQuad[4], dstQuad[4]; CvMat* warp_matrix = cvCreateMat(3, 3, CV_32FC1); //创建矩阵 IplImage *src, *dst; src = cvLoadImage("5.jpg", 1); dst = cvCloneImage(src); dst->origin = src->origin; cvZero(dst); srcQuad[0].x = 0; srcQuad[0].y = 0; srcQuad[1].x = src->width - 1; srcQuad[1].y = 0; srcQuad[2].x = 0; srcQuad[2].y = src->height - 1; srcQuad[3].x = src->width - 1; srcQuad[3].y = src->height - 1; dstQuad[0].x = src->width *0.05; dstQuad[0].y = src->height *0.33; dstQuad[1].x = src->width * 0.9; dstQuad[1].y = src->height *0.25; dstQuad[2].x = src->width *0.2; dstQuad[2].y = src->height *0.7; dstQuad[3].x = src->width * 0.8; dstQuad[3].y = src->height *0.9; cvGetPerspectiveTransform(srcQuad, dstQuad, warp_matrix); //稀疏透视变换 cvWarpPerspective(src, dst, warp_matrix);//密集透视变换 cvNamedWindow("show", 1); cvShowImage("show", dst); cvWaitKey(); cvReleaseImage(&dst); cvReleaseImage(&src); cvDestroyAllWindows(); return 0; }