OpenCV를 이용해 배경을 뺀 영상만 찾아내고자 할때

Background Subtractor 함수를 이용해서 움직이는 대상만 추출해 낼 수 있다.

 

OpenCV 2.4.11 에서는 MOG와 MOG2를 지원하고 있다.

 

간단하게 소스코드로 확인해 보면

 

 

import cv2

 

capture = cv2.VideoCapture('movingpeople.mp4')

bgs_mog = cv2.BackgroundSubtractorMOG()
bgs_mog2 = cv2.BackgroundSubtractorMOG2()

 

if __name__ == "__main__":
    while (capture.isOpened()):
        ret, frame = capture.read()
        fgmask = bgs_mog.apply(frame)
        fgmask2 = bgs_mog2.apply(frame)
        mask_rbg = cv2.cvtColor(fgmask,cv2.COLOR_GRAY2BGR)
        draw = frame & mask_rbg
        cv2.imshow('MOG', draw)
        #cv2.imshow('MOG', fgmask)
        #cv2.imshow('MOG2', fgmask2)

 

        c = cv2.waitKey(1)
        if c == 27:
            break

 

    capture.release()
    cv2.destroyAllWindows()

 

중요한 부분만 간단하게 설명하면

cv2.VideoCapture 로 카메라 또는 동영상을 입력받는다.

(mp4는 제대로 읽히지 않는데 opencv_ffmpeg2411.dll을 python 루트 디렉토리로 카피하면 된다.

 당연히 자신이 사용하는 버젼으로...)

 

cv2.BackgroundSubtractorMOG()

백그라운드제거 클래스를 선언한다.

 

이때 프레임수나 노이즈에 대한 설정이 가능하지만 여기선 생략하겠다.

자세한 사항은 opencv documentation 참조

 

http://docs.opencv.org/2.4.12/modules/video/doc/motion_analysis_and_object_tracking.html?highlight=mog#BackgroundSubtractorMOG : public BackgroundSubtractor

 

Python: cv2.BackgroundSubtractorMOG([history, nmixtures, backgroundRatio[, noiseSigma]]) → <BackgroundSubtractorMOG object>

 


Parameters:
•history – Length of the history.
•nmixtures – Number of Gaussian mixtures.
•backgroundRatio – Background ratio.
•noiseSigma – Noise strength.
 

Default constructor sets all parameters to default values.

 

 

read함수로 읽어 드린 프레임을

해당 클래스로 apply 하면 끝난다.

 

bgs_mog.apply(frame)

 

마스킹된 정보를 이용해 해당 영역만 칼라로 보여주려고 하면

draw를 표출하고

마스크 영상만 표시하려고 하면

fgmask를 imshow에 넣으면 된다.

 

Posted by 휘프노스
,