C#/C# OpenCV/

C# OpenCV 3-4. 기하학적 변환

2019. 11. 1.

대표함수

WarpAffine 3점을 기준으로 이미지를 변환

WarpPerspective 4점을 기준으로 이미지를 변환

 

Example Code

using System;
using System.Windows.Forms;
using OpenCvSharp;

namespace warptest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Mat src = Cv2.ImRead("test.jpg");
            Cv2.ImShow("source", src);

            Point2f[] srcpoint = new Point2f[3] { new Point2f(200, 200), new Point2f(200, 600), new Point2f(600, 200) };
            Point2f[] dstpoint = new Point2f[3] { new Point2f(100, 100), new Point2f(200, 500), new Point2f(400, 100) };

            Mat affinematrix = Cv2.GetAffineTransform(srcpoint, dstpoint);
            Mat affine = new Mat();

            Cv2.WarpAffine(src, affine, affinematrix, src.Size());
            Cv2.ImShow("affine", affine);

            Point2f[] srcpoint2 = new Point2f[4] { new Point2f(153, 400), new Point2f(0, 610), 
                                                    new Point2f(469, 400), new Point2f(599, 610) };
            Point2f[] dstpoint2 = new Point2f[4] { new Point2f(153, 400), new Point2f(153, 610), 
                                                    new Point2f(469, 400), new Point2f(469, 610) };

            Mat perspectivematrix = Cv2.GetPerspectiveTransform(srcpoint2, dstpoint2);
            Mat perspective = new Mat();

            Cv2.WarpPerspective(src, perspective, perspectivematrix, src.Size());
            Cv2.ImShow("perspective", perspective);


        }
    }
}

 

Explain Code

Mat src = Cv2.ImRead("test.jpg");
Cv2.ImShow("source", src);

원본이미지 로드, 보여주기

 

Point2f[] srcpoint = new Point2f[3] { new Point2f(200, 200), new Point2f(200, 600), new Point2f(600, 200) };
Point2f[] dstpoint = new Point2f[3] { new Point2f(100, 100), new Point2f(200, 500), new Point2f(400, 100) };

Mat affinematrix = Cv2.GetAffineTransform(srcpoint, dstpoint);

3점변환(Affine)에 사용할 원본이미지의 포인트, 변환할 포인트 지정

Cv2.GetAffineTransform 을 이용 매트릭스 변환

 

Mat affine = new Mat();

Cv2.WarpAffine(src, affine, affinematrix, src.Size());
Cv2.ImShow("affine", affine);
            

변환된 이미지를 저장할 Mat선언

Cv2.WarpAffine을 이용 이미지변환, 보여주기

 

Point2f[] srcpoint2 = new Point2f[4] { new Point2f(153, 400), new Point2f(0, 610), 
                                        new Point2f(469, 400), new Point2f(599, 610) };
Point2f[] dstpoint2 = new Point2f[4] { new Point2f(153, 400), new Point2f(153, 610), 
                                        new Point2f(469, 400), new Point2f(469, 610) };

Mat perspectivematrix = Cv2.GetPerspectiveTransform(srcpoint2, dstpoint2);
            

4점변환(Perspective)에 사용할 원본이미지의 포인트, 변환할 포인트 지정

Cv2.GetPerspectiveTransform 을 이용 매트릭스 변환

 

Mat perspective = new Mat();

Cv2.WarpPerspective(src, perspective, perspectivematrix, src.Size());
Cv2.ImShow("perspective", perspective);
            

변환된 이미지를 저장할 Mat선언

Cv2.WarpPerspective를 이용 이미지변환, 보여주기

 

결과

Affine

Perspective