[VB.NET] 차근차근 OpenCVSharp 강좌 - 18. HSV

2023. 1. 30. 13:29VB.NET/OpenCVSharp

HSV는 색상(Hue), 채도(Saturation), 명도(Value)로 이미지를 분리하는걸 뜻한다. 보통 이미지를 분리할때 RGB나 CRMK등 이미지 자체의 관점으로 분리하는데 HSV는 이미지를 보는 인간의 관점으로 분리한다는 특징이 있다. 아래 원본 이미지를 이용해서 언덕위의 황토색만 인식해서 떼어내보자.

 

OpenCVSharp - HSV 이미지 색상분리 원본

메인폼에 버튼 추가 - Name : ButtonHSV, Text : HSV

버튼클릭 이벤트에 아래 소스를 추가해서 확인해보자.

Private Sub ButtonHSV_Click(sender As Object, e As EventArgs) Handles ButtonHSV.Click
    Dim org As New Mat("D:\test\ocean.jpg", ImreadModes.Color), hsv, mask, dst As New Mat
    Cv2.CvtColor(org, hsv, ColorConversionCodes.BGR2HSV)
    Dim lower As New Scalar(20, 20, 100), upper As New Scalar(30, 255, 255)
    Cv2.InRange(hsv, lower, upper, mask)
    Cv2.BitwiseAnd(org, org, dst, mask)
    PictureBoxOrg.Image = org.ToBitmap : PictureBoxDst.Image = dst.ToBitmap
End Sub

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

OpenCVSharp - HSV 추출 결과

위 기능을 간략히 설명하면 원본 이미지를 불러와서 특정 색의 범위를 주고 해당 색만 놔두고 나머지는 검게 변경하면 된다.

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

원본 이미지를 불러오고 각각 기능을 하는 매트릭스를 선언한다.
hsv - BGR 형식의 이미지를 HSV형식으로 변경해서 저장
mask - 특정 색의 범위를 마스크로 사용하기 위해 저장
dst - 변환 결과 저장

Line 2 : Cv2.CvtColor(org, hsv, ColorConversionCodes.BGR2HSV)

BGR 형식의 이미지를 HSV 형식으로 변환

Line 3 : Dim lower As New Scalar(20, 20, 100), upper As New Scalar(30, 255, 255)

변환할 색상의 범위 지정

Line 4 : Cv2.InRange(hsv, lower, upper, mask)

위 지정된 범위의 색상을 마스크에 반영

Line 5 : Cv2.BitwiseAnd(org, org, dst, mask)

위 마스크를 원본 이미지에 반영해서 대상 이미지에 저장

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

원본과 작업 결과물을 픽처박스에 뿌림

HSV 기능은 원본 이미지에서 특정 색에 해당되는 부분만 따로 떼어 놓을때 유용하다.

반응형