C#/C# OpenCV/
C# OpenCV 3-1. 대칭 & 회전
2019. 10. 28.
Flip & Rotate
Flip 이미지를 대칭시킬때 사용
Rotate 이미지를 회전시킬때 사용
Example Code
using System;
using System.Windows.Forms;
using OpenCvSharp;
namespace fliptest
{
public partial class Form1 : Form
{
Mat src;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
src = new Mat("image.jpg");
pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);
}
private void Button1_Click(object sender, EventArgs e)
{
Mat dst = new Mat(src.Size(), MatType.CV_8UC3);
Cv2.Flip(src, dst, FlipMode.X);
Cv2.ImShow("X축", dst);
Cv2.Flip(src, dst, FlipMode.Y);
Cv2.ImShow("Y축", dst);
Cv2.Flip(src, dst, FlipMode.XY);
Cv2.ImShow("XY축", dst);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
public Mat Rotate(Mat src, int angle)
{
Mat rotate = new Mat(src.Size(), MatType.CV_8UC3);
Mat matrix = Cv2.GetRotationMatrix2D(new Point2f(src.Width / 2, src.Height / 2), angle, 1);
Cv2.WarpAffine(src, rotate, matrix, src.Size(), InterpolationFlags.Linear);
return rotate;
}
private void Button2_Click(object sender, EventArgs e)
{
Mat dst = new Mat(src.Size(), MatType.CV_8UC3);
dst = Rotate(src, 60);
Cv2.ImShow("60도", dst);
dst = Rotate(src, 90);
Cv2.ImShow("90도", dst);
dst = Rotate(src, 120);
Cv2.ImShow("120도", dst);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
}
}
Explain Code
private void Button1_Click(object sender, EventArgs e)
{
Mat dst = new Mat(src.Size(), MatType.CV_8UC3);
Cv2.Flip(src, dst, FlipMode.X);
Cv2.ImShow("X축", dst);
Cv2.Flip(src, dst, FlipMode.Y);
Cv2.ImShow("Y축", dst);
Cv2.Flip(src, dst, FlipMode.XY);
Cv2.ImShow("XY축", dst);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
Flip을 이용해 X, Y, XY축으로 대칭
public Mat Rotate(Mat src, int angle)
{
Mat rotate = new Mat(src.Size(), MatType.CV_8UC3);
Mat matrix = Cv2.GetRotationMatrix2D(new Point2f(src.Width / 2, src.Height / 2), angle, 1);
Cv2.WarpAffine(src, rotate, matrix, src.Size(), InterpolationFlags.Linear);
return rotate;
}
회전함수 생성
Mat rotate 리턴시킬 값
Mat matrix 회전 중심점과 회전시킬 각도 설정
Cv2.GetRotationMatrix2D(point2f center, double angle, double scale)
point2f center 중심점으로 설정할 좌표, double angel 회전시킬 각도, double scale 확대or축소할 비율
WarpAffine(src, rotate, matrix, size, flags) 원본이미지, 결과이미지, 변형시킬배열, 결과사이즈, 이미지보간방법
private void Button2_Click(object sender, EventArgs e)
{
Mat dst = new Mat(src.Size(), MatType.CV_8UC3);
dst = Rotate(src, 60);
Cv2.ImShow("60도", dst);
dst = Rotate(src, 90);
Cv2.ImShow("90도", dst);
dst = Rotate(src, 120);
Cv2.ImShow("120도", dst);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
위에서 생성한 함수를 이용
원하는 각도로 회전가능
Result
대칭
회전