오픈 소스로 개발되고 있는 컴퓨터 비전 및 머신 러닝 라이브러리
Open Source Computer Vision Library의 약자
기본적인 영상 파일 입출력, 화질 향상, 객체 검출과 인식, 추적, 3차원 비전 문제 해결 등의 기능
심층 신경망(DNN, Deep Neural Network)모델을 실행하는 기능도 집중적으로 개발중임
실시간 처리를 고려하여 만들어져 다양한 하드웨어 플랫폼에서 매우 빠르게 동작, 특히 인텔 CPU에서 최적으로 동작
C/C++로 작성되었지만, Pytho, JAVA, Matlab, Javascript 인터페이스를 제공
안드로이드와 iOS 환경도 지원함
일부 기능은 병렬 처리로 동작이 가능
MMX, SSE, AVX, NEON 등 CPU 특화 명령어 지원
CUDA와 OpenCL을 통한 GPU 활용 지원
BSD 라이선스를 따르고 있음: 학계연구, 상업적 용도, 상용 프로그램 마나들고, 소스 코드의 일부를 사용하여 프로그램 개발 가능
1999, 인텔에서 개발된 IPL을 기반으로 만들어지기 시작하였고 이후 오픈소스로 전환됨
C언어 기반, 주로 구조체와 함수 기반으로 알고리즘 표현, lplImage라는 구조체로 영상 데이터 표현
C++ 인터페이스 사용, Mat클래스 사용
OpenCL 사용성을 크게 확대한 T-API(Transparent API)를 지원하기 시작함
유료로 사용해야 했던 인텔 IPP(Integrated Performance Primitives)라이브러리 일부를 무료로 사용
DNN 모듈이 기본 소스에 포함되기 시작
AVX/AVX2/SSE4.x 최적화가 추가됨
C++11의 필수 지원, 람다 표현식 사용 가능,
Mask-RCNN, Darknet과 같은 최신 딥러닝 네트워크 구조 지원
QR코드 검출 및 해석
C API지원 중지, lplImage사용 불가
world를 넣으면 대표적인 모듈까지포함된다
opencv_world455.lib, opencv_world455.dll
Opencv 모듈은 각각의 lib와 dll파일이 만들어짐,
core모듈은 행렬 및 영상을 저장하는 용도로 사용되어 항상 필요함
videoio, imgcodecs 모듈은 동영상 또는 정지 영상 파일을 불러오기 위해 사용
imgproc로 기본적인 영상 처리
features2d, objdetect, video 로 특징점 검출, 객체 검출, 움직임 분석 위해
추가 모듈은 GitHub사이트에서 opencv_contrib라는 이름의 저장소를 통해 따로 배포되고 옴
const String& filename: 프로그램 작업 폴더가 아닌 다른 곳에서 파일 불러오려면 절대경로, 혹은 상대경로를 적어줘야함
int flags = IMREAD_COLOR: 불러올 영상의 컬러모드와 영상 크기를 지정. ImreadModes 열거형 상수 지정 가능
Mat 클래스의 멤버함수로 영상이 제대로 불러왔는지 확인하기 위해 사용됨
Mat 객체에 저장된 데이터를 나타내기 위해 생성하는 빈 창
const String& winname: 생성하는 윈도우 이름
int flags = WINDOW_AUTOSIZE: 창의 속성/크기 지정
위 함수를 사용하지 않더라도 프로그램이 종료되면 window창이 사라지기는 하나 프로그램 동작 중에 창을 닫고 싶을 때 사용함
InputArray mat: InputArray 타입은 Mat, vector 다양한 객체를 표현할 수 있는 인터페이스 클래스임, 대부분 Mat을 전달한다는 의미
winname에 해당하는 창이 없으면 자동으로 그 winname에 해당하는 WINDOW_AUTOSIZE 속성의 창을 만들어서 영상으로 출력한다.
또한 ctrl + c 로 복사, ctrl + s로 저장도 가능하다.
사용자로부터 키보드 입력을 받는 용도로 사용됨
#include "./opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat lenna = imread("lenna.bmp");
if (lenna.empty())
cerr << "lenna image not found!";
namedWindow("myWindow", WINDOW_AUTOSIZE);
imshow("myWindow", lenna);
waitKey(0);
destroyWindow("myWindow");
}