[VB.NET] 차근차근 OpenCVSharp 강좌 - 9. 픽셀 빼기

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

픽셀값 빼기는 더하기와 완전 동일하다. 그냥 값을 더하느냐 빼느냐의 차이.

메인폼에 버튼 추가 - Name : ButtonSubtract, Text : Subtract

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

Private Sub ButtonSubtract_Click(sender As Object, e As EventArgs) Handles ButtonSubtract.Click
    Dim org As New Mat("D:\test\chipmunk.jpg", ImreadModes.Color), dst As New Mat
    Dim val As New Mat(org.Size(), MatType.CV_8UC3, New Scalar(0, 30, 0))
    Cv2.Subtract(org, val, dst)
    PictureBoxOrg.Image = org.ToBitmap : PictureBoxDst.Image = dst.ToBitmap
End Sub

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

OpenCVSharp - 픽셀값 빼기

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

원본 및 대상 이미지 선언

Line 2 : Dim val As New Mat(org.Size(), MatType.CV_8UC3, New Scalar(0, 30, 0))

픽셀 연산을 위한 스칼라 값 생성. 픽셀 빼기도 픽셀 더하기와 마찬가지로 두개의 이미지끼리 할수도 있고, 하나의 이미지와 하나의 스칼라값을 뺄 소두 있다. 각 파라미터의 상세 내용은 픽셀 더하기 강좌를 참고하자.

Line 3 : Cv2.Subtract(org, val, dst)

원본 이미지에 스칼라 값을 빼서서 결과를 대상이미지에 저장해준다.

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

최종 결과를 화면에 뿌려주면 픽셀 빼기는 마무리가 된다.

픽셀을 더하거나 빼는 연산, 다음번에 나올 곱하거나 나누는 연산등은 그 자체만으로 사용하기 보다는 다른 효과와 함께 사용하면 이미지의 세세한 부분을 조절하는데 도움이 될것 같다.

이게 OpenCVSharp에서 지원해주니 간단하게 사용하고, 빠른 결과를 도출할 수 있는 것이지, 직접 한픽셀씩 만지면서 연산하면 만드는데도 오래 걸리고, 오류처리도 다 직접해야하고, 처리속도도 빠르게 하기위해 이중메모리 버퍼등 난이도 있는 기술을 사용해야 만들수 있을 것이다. VB.NET 어떤 식으로든 이미지를 조작할 필요성이 생기면 무조건 OpenCVSharp으로 되는지 검색해보고 지원 안하는 경우에만 직접 만들도록 하자. 웬만하면 지원할거다.

반응형