仿射变换主要是将图像旋转,拉伸,它通过一个矩阵将源图像像素变换到指定的目标图像的位置,这个矩阵成为变换矩阵。仿射变换分为两步,第一步是得到变换矩阵,第二步是进行变换。
void CImgPro::SetAffineTranform(const string strPic)
{
Mat imgSrc = imread(strPic);
Point2f ptSrc[3];
Point2f ptDst[3];
Mat warp(2, 3, CV_32FC1);
Mat warpDst = Mat::zeros(imgSrc.rows, imgSrc.cols, imgSrc.type());
ptSrc[0] = Point2f(0, 0);
ptSrc[2] = Point2f(0, imgSrc.rows - 1.f);
ptSrc[1] = Point2f(imgSrc.cols - 1.f, 0);
ptDst[0] = Point2f(imgSrc.cols*0.0f,imgSrc.rows*0.33f);
ptDst[1] = Point2f(imgSrc.cols*0.85f, imgSrc.rows*0.25f);
ptDst[2] = Point2f(imgSrc.cols*0.15f, imgSrc.rows*0.7f);
warp = getAffineTransform(ptSrc, ptDst);
warpAffine(imgSrc, warpDst, warp, warpDst.size());
imshow("变换后的图", warpDst);
imshow("变换前的图", imgSrc);
waitKey(0);
}