OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝/ OpenCV 설치와 기초 사용법

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 모듈에 포함되어 있음.
모듈 이름 설명
core 행렬, 벡터 등 OpenCV 핵심 클래스와 연산 함수
calib3d 카메라 캘리브레이션과 3차원 재구성
dnn 심층 신경망 기능
features2d 2차원 특징 추출과 특징 벡터 기술, 매칭 방법
flann 다차원 공간에서 빠른 최근방 이웃 검색
highgui 영상의 화면 출력, 마우스 이벤트 처리 등 사용자 인터페이스
imgcodecs 영상 파일 입출력
imgproc 필터링, 기하학적 변환, 색 공간 변환 등 영상 처리 기능
ml 통계적 분류, 회기 등 머신 러닝 알고리즘
objdetect 얼굴, 보행자 검출 등 객체 검출
photo HDR, 잡음 제거 등 사진 처리 기능
stitching 영상 이어 붙이기
video 옵티컬 플로우, 배경 차분 등 동영상 처리 기술
videoio 동영상 파일 입출력
world 여러 OpenCV 모듈을 포함하는 하나의 통합 모듈

 

[ssba]

The author

지성을 추구하는 사람/ suyeongpark@abyne.com

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.