Search
🌍

bde. title: OpenCV의 역사와 함께 영상처리 파이프라인에서 OpenCV의 어떤 모듈들이 도움을 줄 있고, 시스템 관점에서 어떻게 조립되는지 조금만 이해해도 라이브러리 사용 두려움을 줄일 수 있다.

생성
🚀 prev note
🚀 next note
♻️ next note
⛳️ 생각진입점링크
💡 아이디어조각
12 more properties
OpenCV 라이브러리는 크고 무겁다. 컴파일 언어 C++로 작성되어 빌드 과정이 복잡하다. 하드웨어와도 맞물려 있기 때문에 설치도 상당히 까다로운 편이다. 일반적인 상황에서는 python과 같은 클라이언트 언어로 C++ 구현체를 호출하여 사용하게 되는데, 복잡한 빌드에 언어적 장벽까지 있다보니 ‘OpenCV는 내가 함부로 건드려서는 안 되는 것’이라는 생각을 가지는 사람이 많다.
하지만 OpenCV도 소프트웨어 관점에서는 여느 거대한 라이브러리들과 마찬가지로 모듈들의 집합이다. OpenCV의 역사와 함께 영상처리 파이프라인에서 OpenCV의 어떤 모듈들이 도움을 줄 있는지 이해하고, OpenCV가 시스템 관점에서 어떤 컴포넌트들과 조립되는지 조금만 이해해도 라이브러리 사용 두려움을 줄일 수 있다.
OpenCV가 등장한 1998년 이전에는 학교나 연구소들에서 자신들만의 영상처리 라이브러리를 직접 개발해서 사용했다고 한다. 인텔의 주도로 모두가 함께 사용할 영상처리 라이브러리를 만드는 프로젝트가 시작되었다.
2006년 개발된 OpenCV 1.0은 C로 구현되었다. 클래스 문법이 없으니 함수와 구조체 집합 형태로 제공되었다. 2009년에 OpcnCV 2.0에서는 C++로 포팅되었고, Mat 클래스를 이용해 영상 데이터를 표현하기 시작됐다. OpenCV 3.0은 인텔의 라이브러리(IPP) 등을 사용하며 성능이 향상됐다. 딥러닝 모듈을 지원하기 시작한 것은 OpenCV 3.3부터이며, OpenCV 4.0 부터는 C++ 11, 17을 지원했고 딥러닝 모듈의 지원도 확대되었다. 버전을 잘 알지 못하면 인터넷에 존재하는 수많은 OpenCV 버전 이슈를 마주할 때 문제를 파악하는 일에 시간이 훨씬 더 많이 들어가므로 알아 두도록 하자.
OpenCV도 여느 대형 라이브러리들과 마찬가지로 모듈이라고 부르는 작은 라이브러리들의 집합이다. 메인 모듈에서는 핵심적인 기능, 널리 사용되는 기능, 언어 인터페이스 지원 등 기반 기능을 지원한다. 추가 모듈(opencv_contrib)에는 새롭게 개발되고 있는 기능, 비주류 기능, 특허가 걸린 기능, CUDA 등 하드웨어 의존적인 기능 등이 포함되어 있다. 따라서, pip install opencv-python 명령은 메인 모듈과 파이썬 언어 인터페이스 지원을 설치하겠다는 것이다. 파이썬으로 OpenCV를 한번이라도 호출해 사용해 봤다면, 인터넷에서 남들이 다 실행하는 기능이 실행되지 않는 경우를 마주할 수 있었을 것이다. 이는 당연히 메인 모듈에 지원하지 않는 기능을 호출하고자 했기 때문일 가능성이 높고, 이런 경우에 pip install opencv-contrib-python 을 실행하라는 것이 솔루션으로 검색되는 이유가 바로 이것이다.
OpenCV 에서 제공하는 다양한 연산들은 기본적으로 병렬처리를 고려하여 설계된다. 이들은 OpenCV의 cv::parallel_for_ 이라는 프레임워크에 의해 지원된다(ref2). 이 프레임워크를 이용하면 C++를 이용해 영상처리 컴포넌트를 구현할 때 쉽게 병렬처리가 가능한 컴포넌트로 만들 수 있다. cv::parallel_for_ 은 또다시 Concurrency, GCD, TBB, OpenMP 등 적절한 병렬처리 라이브러리에 의존한다(ref3). 맥과 iOS환경의 경우 OpenMP를 사용하고 윈도우 환경의 경우 Concurrency를 사용하는 등 OpenCV가 구동되는 운영체제에 맞는 라이브러리를 사용하게 된다. 당연히 CPU 아키텍처나 GPU 사용 여부에도 의존한다.
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료을 보관해 두는 영역입니다.
1.
None
from : 과거의 어떤 원자적 생각이 이 생각을 만들었는지 연결하고 설명합니다.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는지 연결합니다.
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는지 연결합니다.
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되거나 이어지는지를 작성하는 영역입니다.
1.
None
ref : 생각에 참고한 자료입니다.
1.