728x90
반응형



안녕하세요 오랜만에 티스토리 포스팅을 해요. 포스팅을 하는 주된 목적이 하루 또는 일주일 동안 공부한 내용을 정리하는 목적 그리고 공유하는 목적으로 썼었는데 요 며칠간 공부만하느라고, 정리를 못했네요. 정리를 안하니 머리에 남는 것도 없고 다시 정리를 하자는 마음으로 포스팅을 오랜만에 해요.


배경추출 알고리즘을 찾던 도중 OpenCV에 내장되어있는 MOG2 함수를 써보게 되었어요.

OpenCV 3.1 도큐멘트에 있는 내용을 참고하여 작성하였습니다. 


MOG2의 기본 원리는 다음과 같습니다.


현재 프레임(currentframe)과 객체를 추출하기 위한 배경 모델(background model)의 차영상(substraction)을 구하여 Thresholding을 하여 foreground mask를 구하는 것입니다. 또한 기본적인 동작 두가지는 아래와 같습니다.


1. 배경 초기화

2. 배경 업데이트 (프레임 간 변화를 적용)



MOG2는 opencv에 내장되어있으나

MOG는 opencv_contrib에 내장되어 있습니다.



기본 동작은 다음과 같습니다. 


1. 각종 변수, 객체 선언


Mat frame;
Mat fgMaskMOG2;
Ptr<BackgroundSubtractor> pMOG2;
int keyboard;
VideoCapture capture(0);


2. 배경추출 객체 생성


pMOG2 = createBackgroundSubtractorMOG2();


3. MOG2 함수 호출 및 영상 띄우기


pMOG2->apply(frame, fgMaskMOG2);

				imshow("original", frame);
				imshow("MOG2", fgMaskMOG2);




다음은 결과영상입니다. 굴러가는 물체를 생각하다가.. 펜을 굴려보았습니다.











참고자료 1 : http://docs.opencv.org/3.1.0/d1/dc5/tutorial_background_subtraction.html




728x90
반응형