[Computer Vision] OpenCV 개요 및 설치

2023. 10. 11. 00:06Run/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 모듈 필요

 

일반적인 컴퓨터 비전 문제 해결 과정과 관련된 OpenCV 모듈

 

  • 새 프로젝트 만들 때마다 여러 모듈을 프로젝트에 포함하는 것이 번거로우므로 여러 모듈 통합하는 world 모듈 제공
  • world 모듈은 개별적으로 나뉘어 있는 OpenCV 모듈을 모두 합쳐 하나의 모듈로 재구성한 것

 

OpenCV 추가 모듈

  • OpenCV 라이브러리는 현재도 지속적으로 업데이트되고 있고, 최신의 CV 알고리즘은 추가 모듈 형태로 개발되고 있음
    • 추가 모듈에는 주로 아직 안정화되지 않은 최신 알고리즘 구현이 포함됨
    • 이외에도 소스코드는 공개되었으나 알고리즘에 특허가 걸려 있어 무료로 사용 불가한 기능과 CUDA 관련 기능도 배포됨
  • OpenCV GitHub의 opencv_contrib에서 따로 배포됨

 

OpenCV 설치

Mac을 사용하고 있어서 아래 사이트를 참고하였다.

 

[ openCV | C++ ] 비주얼 스튜디오 코드에서 openCV 환경 설정 하는 방법(맥 버전)

1. 비주얼 스튜디오 코드 설치 2. C++ 컴파일 환경 구성(일반) 🔗 tasks.json 파일 3. C++ 디버그 환경구성(일반) 🔗 launch.json 파일 4. opencv 패키지 설치 5. opencv 환경 설정 🔗 c_cpp_properties.json 파일 5.1 pkg

fwanggu-lee.tistory.com