[VB.NET] 차근차근 OpenCVSharp 강좌 - 4. 이미지 회전

2023. 1. 16. 09:00VB.NET/OpenCVSharp

메인폼에 버튼 추가 - Name : ButtonRotate, Text : Rotate

버튼 클릭 이벤트에 아래 소스 추가

Private Sub ButtonRotate_Click(sender As Object, e As EventArgs) Handles ButtonRotate.Click
   Dim org As New Mat("D:\test\chipmunk.jpg", ImreadModes.Color), dst As New Mat
   Dim datum As New Point2f(org.Width / 2, org.Height / 2)
   Dim matrix As Mat = Cv2.GetRotationMatrix2D(datum, 90, 1)
   Cv2.WarpAffine(org, dst, matrix, New OpenCvSharp.Size(org.Width, org.Height))
   PictureBoxOrg.Image = org.ToBitmap : PictureBoxDst.Image = dst.ToBitmap
End Sub

프로젝트 실행후 Rotate 버튼을 누르면 아래 화면과 같이 결과가 나와야 성공

OpenCVSharp - 이미지 회전

Line 1 : Dim org As New Mat("D:\test\chipmunk.jpg", ImreadModes.Color), dst As New Mat

원본과 대상 매트릭스 선언

Line 2 : Dim datum As New Point2f(org.Width / 2, org.Height / 2)

이미지 회전의 기준점 좌표. 이미지를 회전시키기 위해서는 반드시 기준점이 필요하고, OpenCVSharp에서는 이 기준점을 임의로 설정이 가능하기 때문에 이미지를 회전시키는 것만으로도 기준점에 따라서 서로 다른 결과물이 나오게 된다. 이 예제에서는 이미지의 정중앙을 기준점으로 잡았다.

Line 3 : Dim matrix As Mat = Cv2.GetRotationMatrix2D(datum, 90, 1)

위 기준점을 기준으로 회전 각도와 회전후 이미지 크기의 비율을 설정한다. 이 예제에서는 90도 만큼 회전하고, 원본과 동일한 크기로 비율을 설정했다. 이 값들을 바꿔보면서 실행해보면 여러가지 재밌는 결과물을 얻을 수 있으니 직접 해보시기를 바란다.

Line 4 : Cv2.WarpAffine(org, dst, matrix, New OpenCvSharp.Size(org.Width, org.Height))

원본을 위에 지정한 조건인 기준점 - 중앙, 회전각도 - 90도, 결과물 이미지 크기 - 원본과 동일하게 회전시켜서 결과를 dst에 넣는다.

Line 5 : PictureBoxOrg.Image = org.ToBitmap : PictureBoxDst.Image = dst.ToBitmap

뭐 이 부분은 더이상 설명 안해도 될듯 싶다. 매트릭스에 담겨있는 원본과 회전후 결과물을 픽처박스에 뿌려서 화면에 보여주는 기능

OpenCVSharp의 장점은 쉽지 않은 이미지 프로세싱을 아주 쉽게 처리해준다는 것과 이걸 아주 빠른 속도로 처리해주는게 아닐까 싶다.

반응형