Opencv__仿射变换(1)

目录

​​​​​​​1、概念

2、如何获取仿射变换

 3、例程

4、代码

源图(素材来自网络如有雷同请联系作者删除)

仿射变换

旋转缩放

5、常用算子


​​​​​​​

1、概念

        仿射变换:一个任意的仿射变换都能表示为 乘以一个矩阵(线性变换)接着在加上一个向量(平移)。

旋转        =》线性变换

平移        =》向量加

缩放操作 =》线性变换

2、如何获取仿射变换

        仿射变换基本表示的就是两张图之间的联系。

  a、已知两张图有联系,求解矩阵M

 3、例程

        步骤1、加载一幅图片

                2、对这幅图片应用仿射变换,这个变换是从源图像和目标图像的两组三个点之间的联系获取的,这一步我们使用函数warpAffine算子实现。

                3、仿射变换结束后在进行旋转操作,旋转是绕图像中心进行旋转。

                4、等待推出程序。

4、代码

/*OpenCvSharp 4.0*/
/*加载图片并使用仿射变换扭曲图片*/
 public static void  loadMat()
    {
           SourceMat  =  Cv2.ImRead(Path);
            Cv2.ImShow("原始图片",SourceMat);
            DestMat = new Mat(SourceMat.Size(), MatType.CV_8UC3);
            Cv2.CopyTo(SourceMat, DestMat);
            Point2f[] sourcePoints = new Point2f[3];
            Point2f[] destPoints = new Point2f[3];
            sourcePoints[0] = new Point2f(0, 0);
            sourcePoints[1] = new Point2f(SourceMat.Size().Width, 0);
            sourcePoints[2] = new Point2f(0, SourceMat.Size().Height);

            destPoints[0] = new Point2f(DestMat.Cols*(float)0.2, (float)(DestMat.Rows * 0.3));
            destPoints[1] = new Point2f((float)(DestMat.Cols*0.85), (float)(DestMat.Rows * 0.25));
            destPoints[2] = new Point2f((float)(DestMat.Cols * 0.15), (float)(DestMat.Rows * 0.7));
            Mat affineMat=   Cv2.GetAffineTransform(sourcePoints, destPoints);
            Cv2.WarpAffine(SourceMat, DestMat, affineMat, SourceMat.Size());
            Cv2.ImShow("扭曲图片",DestMat); 
     }
/*旋转和缩放图像*/
 public static void RotationMat(Mat TransMat,Point2f center)
    {

            Mat rotationMat=  Cv2.GetRotationMatrix2D(center,-50, 0.6);
            Mat outmat = new Mat(TransMat.Size(), MatType.CV_8UC3);
            Cv2.WarpAffine(TransMat, outmat, rotationMat, TransMat.Size());
            Cv2.ImShow("旋转图片",outmat);
    }

源图(素材来自网络如有雷同请联系作者删除)

Opencv__仿射变换(1)_第1张图片

仿射变换

Opencv__仿射变换(1)_第2张图片

旋转缩放

Opencv__仿射变换(1)_第3张图片

5、常用算子

获取仿射变换算子

Imread();加载图片

ImShow();显示图片

getAffineTransForm():求得扭曲变换

getRotationMatrix2D():求得旋转缩放区镇矩阵

获取仿射变换

warp_mat = getAffineTransform( srcTri, dstTri );

获取旋转矩阵:

rot_mat = getRotationMatrix2D( center, angle, scale );

修正图片:

warpAffine( src, warp_dst, warp_mat, warp_dst.size() );

你可能感兴趣的:(OpenCV,opencv,人工智能,计算机视觉)