OpenCV 개요와 설치
OpenCV 개요
•
OpenCV는 오픈 소스로 개발되고 있는 컴퓨터 비전 및 머신 러닝 라이브러리로 Open Source Computer Vision Library의 약자.
•
OpenCV는 2500개가 넘는 최신 컴퓨터 비전 알고리즘과 머신 러닝 알고리즘을 포함하고 있음.
◦
기본적인 영상 파일 입출력, 영상의 화질 향상, 객체 검출과 인식, 추적, 3차원 비전 문제 등의 기능을 제공하고, K 최근접 이웃 알고리즘(kNN, k-Nearest Neighbor)과 서포트 벡터 머신(SVM, Support Vector Machine) 같은 머신 러닝 알고리즘도 제공 함.
◦
최근에는 딥러닝(deep learning)으로 알려져 있는 심층 신경망(DNN, Deep Neural Network) 모델을 실행하는 기능도 제공되고 있음.
•
OpenCV는 태생부터 실시간 처리를 고려하여 만들어졌기 때문에 다양한 하드웨어 플랫폼에서 매우 빠르게 동작함.
◦
OpenCV는 기본적으로 C/C++ 언어로 작성되었지만 Python, Java, Matlab, JavaScript 등과도 인터페이스도 제공함.
◦
OpenCV는 Windows, Linux, MacOS 등 운영 체제를 지원하고 안드로이드와 iOS 같은 모바일 환경도 지원 함.
◦
OpenCV 기능은 대부분 병렬 처리로 동작하며 MMX, SSE, AVX, NEON 등 CPU 특화 명령어도 지원 함. 또한 오래전부터 CUDA와 OpenCL을 통한 GPU 활용을 지원하고 있음.
OpenCV 역사
•
OpenCV는 1999년 인텔에서 개발된 IPL(Image Primitive Library)을 기반으로 만들어졌음.
•
이후 2000년 일반에 공개되어 오픈 소스로서 개발이 진행되었고, 2006년에 OpenCV 1.0 버전이 정식으로 배포되었음.
◦
OpenCV 1.0은 C 언어를 기반으로 구현되었기 때문에 많은 알고리즘이 구조체와 함수로 구현되었으며 영상 데이터는 IPlImage라는 이름의 구조체로 표현되었음.
•
2009년에 OpenCV 2.0이 발표되었는데, 이때는 C++ 인터페이스를 채택하였고 Mat 이라는 이름의 클래스를 사용하여 영상 데이터를 표현하기 시작했음.
•
2015년 6월에 OpenCV 3.0이 발표되었는데, 이때 OpenCV 프로젝트 구조가 크게 개선되었고 전반적인 성능이 향상 됨.
◦
OpenCV 사용성을 크게 확대한 T-API (Transparent API)를 지원하기 시작했고, 유료로 사용해야 했던 인텔 IPP(Intergrated Performance Primitives) 라이브러리 일부를 무료로 사용할 수 있게 되었음.
◦
2017년 발표된 OpenCV 3.3 버전에서는 최근 각광받고 있는 심층 신경망을 지원하는 DNN 모듈이 기본 소스에 포함되기 시작하였음. 또한 AVX/AVX2/SSE4.x 최적화가 추가되었고 C++ 11 문법을 지원하기 시작함.
•
2018년 11월에 OpenCV 4.0이 발표되었는데, OpenCV 4.0의 가장 큰 변화는 C++ 11의 필수 지원. 람다 표현식(lambda expression)을 사용할 수 있게 됨.
◦
이 외에도 DNN 모듈 기능이 강화되어 AlexNet, Inception v2, Resnet, VGG 같은 영상 분류기 뿐만 아니라 Mask-RCNN, tiny YOLO 같은 최신 딥러닝 네트워크 구조를 지원함. QR 코드를 검출하고 해석하는 기능도 새롭게 제공 됨.
◦
OpenCV 4.0에서는 오래된 C API 지원이 종료되어 더는 IplImage 구조체를 사용할 수 없게 됨.
OpenCV 모듈
•
OpenCV 라이브러리는 다수의 모듈(module)로 구성되어 있음.
◦
OpenCV의 핵심 클래스와 함수는 core 모듈에 있으며, 영상 출력 기능은 highgui 모듈에 포함되어 있음.