opencv学习日记——对小姐姐进行旋转和仿射变换
1,中心点➕角度 进行图形旋转与仿射
2, 三点法 进行图形旋转与仿射
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
//读图
Mat img1 = imread("sister.jpg");
//转换尺寸,小姐姐有点太大
Mat img;
resize(img1, img, Size(670, 471));
//测试读取成功了吗
if (img.empty())
{
cout << "读取图片失败";
return -1;
}
Mat img_warp0, img_warp1, rotation0, rotation1;
//中心点➕角度 进行图形旋转与仿射
//尺寸
Size dst_size11(img.rows, img.cols);
//中心点
Point2f center(img.rows/2, img.cols/2);
double angle = 10;
//旋转矩阵 = ***(中心点, 角度, 尺度)
rotation0 = getRotationMatrix2D(center, angle, 1);
// 原图 新图 旋转矩阵 新图尺寸
warpAffine(img, img_warp0, rotation0, dst_size11);
//出图
imshow("img_warp0", img_warp0);
//三点法 进行图形旋转与仿射
Point2f src_points[3];
Point2f dst_points[3];
//定义三个点坐标
src_points[0] = Point2f(0, 0);
src_points[1] = Point2f(0, (float)(img.cols - 1));
src_points[2] = Point2f((float)(img.rows - 1), (float)(img.cols - 1));
//转化后三个点坐标
dst_points[0] = Point2f((float)(img.rows) * 0.11, (float)(img.cols) * 0.20);
dst_points[1] = Point2f((float)(img.rows) * 0.15, (float)(img.cols) * 0.70);
dst_points[2] = Point2f((float)(img.rows) * 0.81, (float)(img.cols) * 0.85);
//得到旋转矩阵
rotation1 = getAffineTransform(src_points, dst_points);
// 原图 新图 旋转矩阵 新图尺寸
warpAffine(img, img_warp1, rotation1, dst_size11);
//出图
imshow("img_warp1", img_warp1);
//等待
waitKey(0);
return 0;
}