[VB.NET] 차근차근 OpenCVSharp 강좌 - 2. Gray 이미지로 변환

2023. 1. 13. 10:40VB.NET/OpenCVSharp

이번 강좌부터는 순차적으로 OpenCVSharp을 이용해서 이미지를 변환할겁니다. 지원하는 효과가 엄청 다양하니 할 수 있는만큼 하나씩 구현해보도록 하겠습니다. <a target="_new" href="https://www.abiks.co.kr/?p=27326">이전 강좌</a>의 OpenCVSharpExam 프로젝트에 버튼을 하나씩 추가하면서 구현할 예정이니 혹시 아직 이전 강좌를 안읽으신 분은 반드시 이전 강좌를 숙지하시고, 더불어 OpenCVSharpExam 프로젝트를 생성하신 상태로 이후 강좌를 따라하시기 바랍니다.

메인폼에 버튼을 추가하세요. Text는 Gray로, Name은 ButtonGray라고 명명합니다. ButtonGray의 Click 이벤트에 아래 소스를 추가한 후 실행해서 눌러보세요. 이미지는 아무거나 사용해도 되지만 맨 아래에 첨부되어 있는 다람쥐 사진을 사용했습니다. 이 사진만으로 모든 예제를 다 구현하도록 하겠습니다.

Imports OpenCvSharp
Imports OpenCvSharp.Extensions

Public Class Form1
    Private Sub ButtonGray_Click(sender As Object, e As EventArgs) Handles ButtonGray.Click
        Dim org As New Mat("D:\test\chipmunk.jpg", ImreadModes.Color)
        Dim dst As New Mat : Cv2.CvtColor(org, dst, ColorConversionCodes.BGR2GRAY)
        PictureBoxOrg.Image = org.ToBitmap : PictureBoxDst.Image = dst.ToBitmap
    End Sub
End Class

아래 화면처럼 Gray 이미지가 나와야 성공한겁니다.

이미지 Gray 변경

성공하셨나요? 그러면 이제 소스를 하나씩 분석하면서 기능을 숙지해봅시다. OpenCVSharp을 사용하는 첫번째 강좌이니 한줄씩 아주 상세하게 설명해보겠습니다. 다음번 강좌부터는 OpenCVSharp으로 어떤 기능을 구현할 수 있는지에 초점을 맞출 예정입니다. 사용법은 이것과 거의 동일하니까요.

Line 1. Imports OpenCvSharp
Line 2. Imports OpenCvSharp.Extensions

OpenCVSharp을 사용하기 위해 Import 합니다. NuGet 패키지 관리자에서 추가후 Import를 해줘야 비로소 사용이 가능해지는거죠.

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

OpenCVSharp의 이미지 기본형인 Mat(매트릭스)형으로 원본 이미지를 불러옵니다. 두번째 파라미터인 ImreadModes.Color 플래그를 이용해서 컬러이미지를 불러와서 org 변수에 넣습니다. 이걸 ImreadModes.Grayscale로 설정하면 아예 원본을 Gray 이미지로 불러올 수 있으니 참고하세요.

Line 4. Dim dst As New Mat : Cv2.CvtColor(org, dst, ColorConversionCodes.BGR2GRAY)

대상 이미지 매트릭스인 dst를 선언하고, 그레이 이미지로 변환합니다. 여기서 모든 OpenCVSharp 기능의 핵심인 Cv2 클래스가 드디어 등장했네요. 그냥 모든 기능은 Cv2 클래스를 사용하고, 이 클래스가 제공하는 함수들을 하나씩 사용하면서 이미지에 효과를 준다고 생각해도 과언이 아니죠.

이번 강좌에서는 컬러이미지를 Gray 이미지로 변환하는 것이니, Cv2 클래스에서 제공하는 함수중 CvtColor 이라는 함수를 사용하면 됩니다. 뭐 대충 Convert Color 즉, 색상을 변경하는 함수겠지 라고 감이 오는 네이밍이죠. 파라미터로 원본매트릭스, 대상매트릭스, 코드 이렇게 세개가 들어갑니다.

원본을 코드에 맞는 형식으로 변환해서 대상에 넣어줍니다. 이 함수 하나만으로 컬러이미지는 그레이 이미지로 변환되서 dst라는 매트릭스에 들어갔네요.

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

상당히 직관적이죠? 원본 이미지와 대상 이미지를 각각의 픽처박스에 넣어서 화면에 뿌려줍니다.

위 4라인과 5라인에 사용된 콜론(:)은 두줄 이상의 코드를 한줄로 사용가능하도록 해주는 아주 유용한 연산자(?), 키워드(?) 뭐 암튼 그렇네요. 소스 가독성이나 관련항목을 붙여쓸때 아주 유용하답니다.

이번 강좌는 처음으로 Cv2 클래스를 사용해서 이미지를 변환하는 강좌이니 혹시 조금이라도 이해가 안되는 부분이 있으면 몇번이고 다시 읽어보면서 정확히 개념을 익혀야 다음번 강좌부터 손쉽게 따라오실 수가 있을거에요.

개발이라는게 모를때야 뜬구름같고 어렵지만 알고나면 별거 아니잖아요. 오늘도 화이팅하세요.

강좌에서 사용되는 원본 이미지

반응형