OpenCV(Open Source Computer Vision)는 오픈 소스 컴퓨터 비전 라이브러리다. 객체ㆍ얼굴ㆍ행동 인식, 독순, 모션 추적 등의 응용 프로그램에서 사용한다.
Open Source Computer Vision Library의 약자로, 이미지 및 비디오 처리와 같은 컴퓨터 비전 작업을 위한 오픈 소스 라이브러리이다. C++, Python, Java 등 다양한 언어를 지원하며, 이미지 처리, 객체 인식, 영상 분석 등 다양한 기능을 제공한다. 얼굴 인식, 객체 추적, 의료 영상 분석 등 다양한 분야에서 활용된다. 카메라로 찍어서 할 수 있는 모든 일은 OpenCV로 처리할 수 있다. 여기에 머신 러닝과 A.I를 활용할 수도 있다.
OpenCV는 실시간 처리에 중점을 두고 설계되서 빠른 속도와 효율성을 자랑한다. 기반 언어는 C++로 멀티 코어 프로세서를 활용할 수 있다.
OpenCV 라이브러리를 C#에서 사용할 수 있도록 해주는 래퍼 라이브러리이다. 즉, OpenCV의 기능을 C#에서 쉽게 사용할 수 있도록 도와주는 도구이다. OpenCVSharp을 사용하면 C#에서 이미지 및 비디오 처리, 객체 인식 등 다양한 컴퓨터 비전 작업을 수행할 수 있다.
WPF에서 OpenCVSharp 라이브러리 사용 이유
WPF는 .NET Framework에서 제공하는 UI 프레임워크이고, OpenCV는 C++로 작성된 컴퓨터 비전 라이브러리이다. 따라서 WPF에서 OpenCV를 직접 사용하기는 어렵다.
이때 OpenCVSharp 라이브러리가 WPF와 OpenCV를 연결하는 역할을 한다. OpenCVSharp은 OpenCV를 C#에서 사용할 수 있도록 해주는 래퍼 라이브러리이다.
Mat 클래스는 OpenCVSharp에서 제공하는 클래스로, WPF에서 OpenCV의 기능을 사용하기 위해서는 Mat 클래스를 사용해야 한다.
컴퓨터를 사용하여 인간의 시각 시스템을 모방하는 분야이다. 즉, 컴퓨터가 이미지나 비디오를 이해하고 해석할 수 있도록 하는 기술이다. (컴퓨터 비전은 이미지 인식, 객체 검출, 영상 분할, 3차원 재구성 등 다양한 작업을 포함한다.)
컴퓨터는 숫자의 행렬로 사진 및 여러 형태를 인식한다. 따라서 프로그래머는 숫자의 행렬 형태를 가지고 컴퓨터에게 유의미한 정보를 입력해줌으로써, 사람이 보는 시선과 최대한 비슷하게 만들어야 하는 것이다. 하지만 여기에는 많은 문제가 있다. 사람의 시각 정보는 왜곡이 많다. (우리가 보는 관점에 따라 사물이 왜곡될 수 있다. 비가 오는 등 빛의 양에 따라 달라지기도 한다. 카메라는 3D 정보를 2D로 받아들이고 있으며, 심지어 카메라의 성능에 따라 계속 변하기까지 한다. 전기적 노이즈도 생각해봐야 한다.) 이러한 왜곡을 이겨내고서 우리는 정확한 이미지 처리가 필요한 것이다.
이러한 왜곡은 머신러닝 기술로 어느정도 보완하고 있다. 혹은 다른 추가적인 데이터(라이다 센서/거리 센서 등)를 활용해서 왜곡정보를 올바르게 해석하기 위한 노력을 하고 있다. 그리고 OpenCV는 이러한 다양한 문제들을 해결하기 위한 도구를 제공해주는 것을 목표로 한다.
즉, OpenCV와 OpenCVSharp을 사용하면 C#에서 컴퓨터 비전 애플리케이션을 개발할 수 있다. 예를 들어, OpenCVSharp을 사용하여 이미지에서 얼굴을 인식하거나, 객체를 추적하거나, 이미지를 분석하는 프로그램을 만들 수 있다.
OpenCV
https://studium-anywhere.tistory.com/22
Computer Vision
https://076923.github.io/posts/ComputerVision-1/