OpenCV를 이용해 배경을 뺀 영상만 찾아내고자 할때
Background Subtractor 함수를 이용해서 움직이는 대상만 추출해 낼 수 있다.
OpenCV 2.4.11 에서는 MOG와 MOG2를 지원하고 있다.
간단하게 소스코드로 확인해 보면
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
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에 넣으면 된다.
'Python' 카테고리의 다른 글
Python에서 QT 사용하기 (pyqt) (0) | 2016.05.20 |
---|---|
Python 문자코드 다루기 (아스키 코드 변환) (0) | 2016.05.20 |
초간단 라즈베리파이(리눅스)에서 시리얼통신 읽어오기 (0) | 2016.01.26 |
파이프를 사용해 표준출력 실행결과 입력 받기 (0) | 2015.08.21 |
초간단 파이썬으로 구현한 모드버스(Modbus) (4) | 2014.12.16 |