[Computer Vision] OpenCV 개요 및 설치
2023. 10. 11. 00:06ㆍRun/Computer Vision
OpenCV 개요
- OpenCV는 C/C++ 으로 작성되었지만 현재 Python, Java, Matlab, JavaScript 등 인터페이스 제공함
- 일부 OpenCV 기능은 병렬 처리로도 동작함
- MMX, SSE, AVX, NEON 등 CPU 특화 명령어 지원함
- 오래전부터 CUDA와 OpenCL을 통한 GPU 활용 지원함
- OpenCV 라이브러리는 BSD 라이선스를 따르므로 학계 연구용이나 상업적 용도로 자유롭게 사용 가능함
OpenCV 역사
- 1999년 Intel에서 개발된 IPL(Image Primitive Library)을 기반으로 만들어지기 시작
- 2000년 일반에 공개되어 오픈소스로서 개발 진행됨
- 2006년 OpenCV 1.0 버전 정식 배포
- C언어 기반 구현
- 많은 CV 알고리즘이 구조체와 함수로 구현
- 영상 데이터는 IPlImage라는 이름의 구조체를 이용하여 표현됨
- 2009년 OpenCV 2.0 발표됨
- C언어 대신 C++ 인터페이스 채택
- Mat이라는 이름의 클래스 사용하여 영상 데이터 표현하기 시작
- C++ 클래스 사용하여 메모리 관리가 더 수월해지고 소스 코드 작성이 편리해짐
- 이후 지속적인 소규모 업데이트가 진행되며 새로운 알고리즘 구현 함수, 성능 개선, 병렬 처리 기능 강화 등 추가됨
- 2015년 6월 OpenCV 3.0 발표됨
- OpenCV 프로젝트 구조가 크게 개선되었고 전반적 성능이 향상됨
- 2017년 8월에 발표된 OpenCV 3.3 버전에서는 DNN 모듈이 기본 소스에 포함되기 시작
- AVX/AVX2/SSE4.x 최적화 추가됨
- 최신 C++ 11 문법 지원 시작
- 2018년 11월 OpenCV 4.0 발표됨
- 가장 큰 변화는 C++ 11 필수 지원
- 함수의 포인터 또는 함수 객체 대신 람다 표현식 사용할 수 있게 됨
- Mat 클래스 객체 초기화 시 C++ 11 초기화 방법 사용할 수 있게 됨
- DNN 모듈 기능 강화되어 AlexNet, Inception v2, Resnet, VGG 등과 Mask-RCNN, Darknet 등을 지원
- QR 코드 검출하고 해석하는 기능 새롭게 제공
- 오래된 C API 지원 종료되어 더이상 IplImage 구조체 등 사용 불가
OpenCV 모듈
- OpenCV 라이브러리는 여러 모듈로 구성되어 있음
calib3d | 카메라 캘리브레이션, 3차원 재구성 |
core | 행렬, 벡터 등 OpenCV 핵심 클래스와 연산 함수 |
dnn | 심층 신경망 기능 |
features2d | 2차원 특징 추출과 특징 벡터 기술, 매칭 방법 |
flann | 다차원 공간에서 빠른 nearest neighbor 검색 |
highgui | 영상의 화면 출력, 마우스 이벤트 처리 등 사용자 인터페이스 |
imgcodecs | 영상 파일 입출력 |
imgproc | 필터링, 기하학적 변환, 색 공간 변환 등 영상 처리 기능 |
ml | 통계적 분류, 회기 등 머신러닝 알고리즘 |
objdetect | 얼굴, 보행자 검출 등 객체 검출 |
photo | HDR, 잡음 제거 등 사진 처리 기능 |
stitching | 영상 이어 붙이기 |
video | 옵티컬 플로우 등 동영상 처리 기술 |
videoio | 동영상 파일 입출력 |
world | 여러 OpenCV 모듈을 포함하는 하나의 통합 모듈 |
- OpenCV 모듈은 각각 별도의 *.lib 파일과 *.dll 파일로 만들어짐
- OpenCV를 이용하는 프로그램 개발하려면 여러 모듈 중 자신에게 필요한 모듈 모두 선택하여 프로젝트에 포함시켜야 함
- core 모듈은 OpenCV에서 행렬 및 영상을 저장하는 용도로 사용되므로 항상 필요
- 동영상, 정지 영상 파일 불러오기 위해 videoio, imgcodecs 모듈 필요
- 기본적인 영상 처리 기능 이용하기 위해 imgproc 모듈 필요
- feature point 검출, 객체 검출, 움직임 분석 등 특화된 CV 기능 사용하기 위해 features2d, obdetect, video 모듈 등 필요
- 영상 인식 또는 판단과 같은 고수준의 작업을 위해 ml 또는 dnn 모듈 필요
- 새 프로젝트 만들 때마다 여러 모듈을 프로젝트에 포함하는 것이 번거로우므로 여러 모듈 통합하는 world 모듈 제공
- world 모듈은 개별적으로 나뉘어 있는 OpenCV 모듈을 모두 합쳐 하나의 모듈로 재구성한 것
OpenCV 추가 모듈
- OpenCV 라이브러리는 현재도 지속적으로 업데이트되고 있고, 최신의 CV 알고리즘은 추가 모듈 형태로 개발되고 있음
- 추가 모듈에는 주로 아직 안정화되지 않은 최신 알고리즘 구현이 포함됨
- 이외에도 소스코드는 공개되었으나 알고리즘에 특허가 걸려 있어 무료로 사용 불가한 기능과 CUDA 관련 기능도 배포됨
- OpenCV GitHub의 opencv_contrib에서 따로 배포됨
OpenCV 설치
Mac을 사용하고 있어서 아래 사이트를 참고하였다.
'Run > Computer Vision' 카테고리의 다른 글
[Computer Vision] OpenCV 주요 기능 (0) | 2023.10.11 |
---|---|
[Computer Vision] Mat 클래스 (0) | 2023.10.11 |
[Computer Vision] 기본 자료형 클래스 (0) | 2023.10.11 |
[Computer Vision] 컴퓨터 비전과 영상의 이해 (1) | 2023.10.11 |
[Image Understanding] Color Image 생성하기 (0) | 2023.10.10 |