#include <opencv2\opencv.hpp>
#include <iostream>
#include <math.h>
#include <vector>
using namespace cv;
using namespace std;
int main()
{
Point2f srcTriangle[3];
Point2f dstTriangle[3];
Mat rotMat(3, 2, CV_32FC1);
Mat warpMat(3, 2, CV_32FC1);
Mat srcImage, dstImage_warp, dstImage_warp_rotate;
srcImage = imread("test1.jpg");
dstImage_warp = Mat::zeros(srcImage.rows, srcImage.cols, srcImage.type());
srcTriangle[0] = Point2f(0, 0);
srcTriangle[1] = Point2f(static_cast<float>(srcImage.rows - 1),0);
srcTriangle[2] = Point2f(0, static_cast<float>(srcImage.rows - 1));
dstTriangle[0] = Point2f(static_cast<float>(srcImage.cols *0.0), static_cast<float>(srcImage.rows*0.33));
dstTriangle[1] = Point2f(static_cast<float>(srcImage.cols *0.65), static_cast<float>(srcImage.rows*0.35));
dstTriangle[2] = Point2f(static_cast<float>(srcImage.cols *0.15), static_cast<float>(srcImage.rows*0.6));
warpMat = getAffineTransform(srcTriangle, dstTriangle);
warpAffine(srcImage, dstImage_warp, warpMat, dstImage_warp.size());
/*namedWindow("tuxiang", WINDOW_AUTOSIZE);
imshow("tuxiang", dstImage_warp);*/
Point center = Point(dstImage_warp.cols / 2, dstImage_warp.cols / 2);
double angle = -30.0;
double scale = 0.8;
rotMat = getRotationMatrix2D(center, angle, scale);
warpAffine(dstImage_warp, dstImage_warp_rotate, rotMat, dstImage_warp.size());
namedWindow("tuxiang", WINDOW_AUTOSIZE);
imshow("tuxiang", dstImage_warp_rotate);
waitKey(0);
return 1;
}
基于C++的opencv练习 仿射变换
最新推荐文章于 2023-10-09 16:45:33 发布