12

OpenCV2.2를 사용하여 Background Subtraction 방식으로 움직이는 물체를 감지합니다. 그리고 Gaussian Mixture Model (GMM) 방법을 사용하여 배경 참조 이미지를 모델링합니다.OpenCV에서 cv :: BackgroundSubtractorMOG를 사용하는 방법?

OpenCV2.2에서 제공하는 cv :: BackgroundSubtractorMOG 클래스를 사용하여 전경 픽셀 (또는 전경 마스크)을 직접 가져옵니다. 그것은 편리하지만 cv :: BackgroundSubtractorMOG에 의해 반환 된 전경 마스크는 내가 기대했던 것만 큼 좋지 않습니다. 또한, cv :: BackgroundSubtractorMOG는 GMM이 OpenCV1.0에서 제공하는 C 언어로 작성한 메소드보다 성능이 떨어지는 것으로 보입니다.

다음은 내 코드는 OpenCV2.2에 있습니다

그래서
cv::BackgroundSubtractorMOG mog; 
mog(frame, fgMask, 0.01); 

, 내가 잘못된 방법으로 방법을 사용 했습니까?

그런데 cv :: BackgroundSubtractorMOG는 전경 픽셀에서 그림자 제거를 수행합니까?

대단히 감사합니다.

+0

다음은 OpenCV의 백그라운드 뺄셈 기능을 사용하는 3.0 docs의 유용한 개요입니다. http://docs.opencv.org/master/db/d5c/tutorial_py_bg_subtraction.html – Pierz

답변

12

mog를 만들 때 매개 변수를 정의하지 않으므로 기본 매개 변수로 생성됩니다. Here 각 매개 변수에 대한 설명이 있습니다. 아마도 그럴 것입니다. 3, 4 5 Gaussians으로 시도하십시오.

이 기능은 섀도우 제거를 수행하지 않지만 this 다른 기능이 있습니다. 행운을 빕니다!

1

this thread에 F.X.의 답변에서 OpenCV의 표준 GMM 구현보다 훨씬 더 나은 배경 (전경을 감지) 제거 최근의 알고리즘이 있습니다

backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8); 
+0

하지만 내 응용 프로그램에서는 매우 느리게 실행됩니다. 나는 좋은 매개 변수에 대해 경계하고있다. – austin

5

의 샘플 매개 변수를 제공합니다.

예를 들어, this journal article에 설명 된 블록 기반 분류기 캐스케이드 접근 방식이 C++ 기반 source code과 함께 있습니다.

+0

이 도구를 사용하기 위해 입력 디렉토리 구조가 어떻게 생겼을 까? readdir()에서 segfault하는 것으로 보입니다. – RussellStewart

0

시작하려면 다음 설정을 사용하는 것이 좋습니다. 그런 다음 당신은 당신의 매개 변수를 조정 시작할 수 있습니다

cv::BackgroundSubtractorMOG2 mog; 
mog(rawFrame,foregroundFrame,-1); 
mog.set("nmixtures", 3); 
mog.set("detectShadows",1); 

을 나는 3 가우스 혼합물로 MOG2의 감산기 설정이 예에서. 나는 또한 그림자 탐지를 가능하게했다.

관련 문제