- MOG 란?
- Minture of Gaussian, GMM(Gaussian Mixture Mode)
- 각 픽셀에 대해 MOG 확률 모델을 설정하여 배경과 전경을 구분
- 다양한 배경 모델 구성 방법
- OpenCV 에서 제공하는 배경 추정 알고리즘
- BackgroundSubtractorMOG2 클래스 생성 함수
cv2.createBackgroundSubtractorMOG2(history=None, varThreshold=None, detectShadows=None) -> dst
• history: 히스토리 길이 . 기본값은 500.
• varThreshold : 픽셀과 모델 사이의 마할라노비스 거리 (Mahalanobis distance) 제곱에 대한 임계값 . 해당 픽셀이 배경 모델에 의해 잘 표현되는 지를 판단 . 기본값은 16.
• detecShadows : 그림자 검출 여부 . 기본값은 True.
- 전면 객체 마스크 생성 함수
cv2.BackgroundSubtractor.apply(image,fgmask=None,learningRate=None) -> fgmask
• image: (입력) 다음 비디오 프레임
• fgmask: (출력) 전경 마스크 영상 . 8 비트 이진 영상
• learningRate: 배경 모델 학습 속도 지정 (0~1 사이의 실수 ). 기본값은 -1.
- 배경 영상 반환 함수
cv2.BackgroundSubtractor.getBackgroundImage(background=None) -> backgroundImage
• backgroundImage : (출력) 학습된 배경 영상
- MOG 기법을 이용한 배경 생성 및 전경 객체 검출
import sys
import numpy as np
import cv2
# 비디오 파일 열기
cap = cv2.VideoCapture('PETS2000.avi')
if not cap.isOpened():
print('Video open failed!')
sys.exit()
# 배경 차분 알고리즘 객체 생성 어떤 방법이 더 좋은지는 영상에 따르다
bs=cv2.createBackgroundSubtractorMOG2()
#bs=cv2.createBackgroundSubtractorKNN()
bs.setDetectShadows(False)
# 비디오 매 프레임 처리
while True:
ret,frame=cap.read()
if not ret:
break
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
fgmask=bs.apply(gray) #0또는 128또는 255 세개의 픽셀값으로 구성되어있는 영상형태로 return
#그림자를 찾으면 128이 들어가고 찾지 않으면 들어가지 않는다
back=bs.getBackgroundImage()
#레이블링을 이용하여 바운딩 박스 표시
cnt,_,stats,_=cv2.connectedComponentsWithStats(fgmask)
for i in range(1,cnt):
x,y,w,h,s=stats[i]
if s<80:
continue
cv2.rectangle(frame,(x,y,w,h),(0,0,255),2)
cv2.imshow('frame',frame)
cv2.imshow('back',back)
cv2.imshow('fgmask',fgmask)
if cv2.waitKey(20)==27:
break
cap.release()
'Computer Vision > opencv(python)' 카테고리의 다른 글
[67] 5) 캠시프트 알고리즘 (0) | 2021.04.03 |
---|---|
[66] 4) 평균 이동 알고리즘 (0) | 2021.03.28 |
[64] 2) 배경 차분: 이동 평균 배경 (0) | 2021.03.27 |
[63] 10.객체 추적과 모션 벡터 1) 배경 차분: 정적 배경 차분 (1) | 2021.03.27 |
[62] (실습) AR 비디오 플레이어 (0) | 2021.03.25 |