首页 > 代码库 > 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。