首页 > 代码库 > OpenCV官方文档学习记录(20)

OpenCV官方文档学习记录(20)

2D仿射变换(AffineTransform)

主要函数:

//获取变换矩阵M=[A B]    warp_mat = getAffineTransform(srcTri, dstTri);
//获取旋转矩阵    rot_mat = getRotationMatrix2D(center, angle, scale);

重要函数:

warpAffine(src, warp_dst, warp_mat, warp_dst.size());

 

代码如下,解释全在注释中:

 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4  5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6  7 using namespace std; 8 using namespace cv; 9 10 void showImg(const string &win_name, const Mat &img)11 {12     namedWindow(win_name, CV_WINDOW_AUTOSIZE);13     imshow(win_name, img);14 }15 16 int main(void)17 {18     Point2f srcTri[3];19     Point2f dstTri[3];20 21     Mat rot_mat(2, 3, CV_32FC1);22     Mat warp_mat(2, 3, CV_32FC1);23     Mat src, warp_dst, rotate_dst;24 25     src = http://www.mamicode.com/imread("lena.jpg");26     if (src.empty())27         return -1;28     showImg("src", src);29 30     warp_dst = Mat::zeros(src.rows, src.cols, src.type());31 32     //原始采样点33     srcTri[0] = Point2f(0, 0);34     srcTri[1] = Point2f(src.cols - 1, 0);35     srcTri[2] = Point2f(0, src.rows - 1);36 37     //构建映射点38     dstTri[0] = Point2f(src.cols*0.0, src.rows*0.33);39     dstTri[1] = Point2f(src.cols*0.85, src.rows*0.25);40     dstTri[2] = Point2f(src.cols*0.15, src.rows*0.7);41 42     //获取变换矩阵M=[A B]43     warp_mat = getAffineTransform(srcTri, dstTri);44 45     warpAffine(src, warp_dst, warp_mat, warp_dst.size());46 47     //旋转中心48     Point center = Point(src.cols / 2, src.rows / 2);49     //旋转角度50     double angle = -50.0;51     //旋转中的缩放(因为方形图像如果不缩放进行旋转会出现溢出现象),保证不溢出的话,缩放要在 二分之根号2 以下(约为0.7左右)52     double scale = 0.7;53 54     //获取旋转矩阵55     rot_mat = getRotationMatrix2D(center, angle, scale);56 57     warpAffine(src, rotate_dst, rot_mat, src.size());58 59     showImg("warp_dst", warp_dst);60     showImg("warp_rotate_dst", rotate_dst);61     waitKey();62     return 0;63 }

 

结果图片:

仿射:

旋转缩放:

 

主要说明请查阅相关数学资料。

 

以上。

 

OpenCV官方文档学习记录(20)