/// <summary>
/// Calculates the matrix of an affine transform such that:
/// (x'_i,y'_i)^T=map_matrix (x_i,y_i,1)^T
/// where dst(i)=(x'_i,y'_i), src(i)=(x_i,y_i), i=0..2.
/// </summary>
/// <param name="src">Coordinates of 3 triangle vertices in the source image. If the array contains more than 3 points, only the first 3 will be used</param>
/// <param name="dest">Coordinates of the 3 corresponding triangle vertices in the destination image. If the array contains more than 3 points, only the first 3 will be used</param>
/// <returns>The 2x3 rotation matrix that defines the Affine transform</returns>
public static RotationMatrix2D <double> GetAffineTransform(PointF[] src, PointF[] dest)
{
Debug.Assert(src.Length >= 3, "The source should contain at least 3 points");
Debug.Assert(dest.Length >= 3, "The destination should contain at least 3 points");
RotationMatrix2D <double> rot = new RotationMatrix2D <double>();
CvInvoke.cvGetAffineTransform(src, dest, rot);
return(rot);
}