用OpenCVSharp4.5 跑一遍OpenCV官方教程
原教程链接:https://docs.opencv.org/4.5.0/d4/d61/tutorial_warp_affine.html
核心函数:warpAffine,getRotationMatrix2D
using System;
using OpenCvSharp;
namespace ConsoleApp1
{
class tutorial18 : ITutorial
{
public void Run()
{
using (Mat src = new Mat("I:\\csharp\\images\\lena.png", ImreadModes.Color))
{
Point2f[] srcTri = new Point2f[3];
srcTri[0] = new Point2f(0, 0);
srcTri[1] = new Point2f( (float)(src.Cols - 1), 0);
srcTri[2] = new Point2f(0, (float)(src.Rows - 1));
Point2f[] dstTri = new Point2f[3];
dstTri[0] = new Point2f(0, (float)src.Rows * 0.33f);
dstTri[1] = new Point2f((float)src.Cols * 0.85f, (float)src.Rows * 0.25f);
dstTri[2] = new Point2f((float)src.Cols * 0.15f, (float)src.Rows * 0.7f);
Mat warp_mat = Cv2.GetAffineTransform(srcTri, dstTri);
Mat warp_dst = Mat.Zeros(src.Rows, src.Cols, src.Type());
Cv2.WarpAffine(src, warp_dst, warp_mat, warp_dst.Size());
Point center = new Point(warp_dst.Cols / 2, warp_dst.Rows / 2);
double angle = -50.0;
double scale = 0.6;
Mat rot_mat = Cv2.GetRotationMatrix2D(center, angle, scale);
Mat warp_rotate_dst = new Mat();
Cv2.WarpAffine(warp_dst, warp_rotate_dst, rot_mat, warp_dst.Size());
Cv2.ImShow("Source image", src);
Cv2.ImShow("Warp", warp_dst);
Cv2.ImShow("Warp + Rotate", warp_rotate_dst);
Cv2.WaitKey();
}
}
}
}