[VB.NET] 차근차근 OpenCVSharp 강좌 - 5. 크기 변경

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

메인폼에 버튼 추가 - Name : ButtonSize, Text : Size

이미지 사이즈를 변경할때는 절대크기와 상대크기의 두가지 방법으로 변경이 가능하다. 절대크기는 이미지 사이즈를 수치로 직접 입력하는 것이고, 상대크기는 원본이미지의 비율에 맞춰서 크기를 변경하는 것이다.

코딩시 둘 사이에 별 차이가 없으니 아래 소스를 추가해서 확인해보자.

Private Sub ButtonSize_Click(sender As Object, e As EventArgs) Handles ButtonSize.Click
   Dim org As New Mat("D:\test\chipmunk.jpg", ImreadModes.Color), dst As New Mat
   Cv2.Resize(org, dst, New OpenCvSharp.Size(200, 100))
   'Cv2.Resize(org, dst, New OpenCvSharp.Size(0, 0), 0.1, 0.1)
   PictureBoxOrg.Image = org.ToBitmap : PictureBoxDst.Image = dst.ToBitmap
End Sub

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

OpenCVSharp - 이미지 크기변경

뭐가 달라졌나 싶겠지만 대상이미지가 상당히 깨져있는 모습을 볼 수 있다. 이유는 PictureBox의 SizeMode 속성을 StretchImage로 만들었기 때문에 사이즈를 작게 변환한 대상 이미지를 픽처박스크기에 맞게 늘려서 이미지가 깨져보이는 것이다. 즉, 크기조절이 정상적으로 됐다는 얘기가 된다.

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

원본과 대상 매트릭스 선언

Line 2 : Cv2.Resize(org, dst, New OpenCvSharp.Size(200, 100))

이미지를 절대크기로 변경한다. 원본 이미지 크기가 얼마든 가로 200, 세로 100으로 강제로 크기를 조절한다. 원본 이미지 기준으로 상대크기로 변경하려면 그 아래줄 소스를 쓰면 된다.

Line 3 : Cv2.Resize(org, dst, New OpenCvSharp.Size(0, 0), 0.1, 0.1)

상대크기로 변경하는 방법은 절대크기로 변경할때 설정했던 Size를 0,0으로 맞춰주고, 이어서 가로 비율과 세로 비율을 적어주면 된다. Cv2 클래스 내부적으로 사이즈가 0,0일 경우 그뒤의 비율을 가져오는듯 하다.

그외에 파라미터로 이미지 보간법을 줘서 사이즈 변경시 좀더 세부조정이 가능하지만, 나는 별로 쓸일이 없어서 그냥 적어만 놔야겠다.

InterpolationFlags.Nearest - 가장 가까운 이웃 보간법
InterpolationFlags.Linear - 쌍 선형 보간법
InterpolationFlags.Area - 영역 보간법
InterpolationFlags.Cubic - 4×4 바이 큐빅 보간법
InterpolationFlags.Lanczos4 - 8×8 란초스 보간법

별 이상한 이름이 있는데 딱히 필요성을 느낀적은 없어서 써본적도 없다.

이미지 크기변경도 이미지 제어시 자주 사용하는 기능중 하나이니 잘 알아두도록 하자.

반응형