添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am trying to use cv2.createBackgroundSubtractorMOG2 () method in Python. I have tried both on my Mac and on my Raspberry Pi, and get the same error when running the following line of code:

fgbg = cv2.createBackgroundSubtractorMOG2()

The code I am using is taken from https://github.com/abidrahmank/OpenCV2-Python-Tutorials/blob/master/source/py_tutorials/py_video/py_bg_subtraction/py_bg_subtraction.rst

I get the following error when running this code:

fgbg = cv2.createBackgroundSubtractorMOG2() AttributeError: 'module' object has no attribute 'createBackgroundSubtractorMOG2'

I can't seem to use any of the createBackgroundSubtractor methods.

I have been trying to solve this for the past day, but I have had no luck searching online, as there is limited support for cv2 on Python.

Thanks in advance

That's strange because it should have been added in the last version (I haven't already checked it). However you can still use cv2.BackgroundSubtractorMOG() instead of cv2.createBackgroundSubtractorMOG2() – jabaldonedo Sep 10, 2013 at 14:48 Great thanks, that makes sense, and cv2.BackgroundSubtractorMOG() is working. Do you have any idea when this will be resolved? – user2765323 Sep 10, 2013 at 15:04

and python 2.7.12. While I tried to use cv2.createBackgroundSubtractorMOG() I received the same error message (also tried without "create..."). But I was surprised when I discovered cv2.createBackgroundSubtractorKNN() with the same functionality instead ... and the test code works :) 2 days I was confused and couldn't find where the problem is.

Thanks for the comments all. It seems that createBackgroundSubtractorMOG2() hasn't been added to OpenCV 2.4, but it is present in master branch, which can be compiled from github.

I am finding that cv2.BackgroundSubtractor() is working for what I need at the moment.

See http://code.opencv.org/issues/2812#note-5 for more details.

I'm using OpenCV-python 2.4.9, and Python2.7.8.

In my environment, cv2.BackgroundSubtracorMOG and cv2.BackgroundSubtractorMOG2 are available.

You can find out what attributes are available by using "help(cv2)" in your python shell.

BackgroundSubtractorMOG(...)
    BackgroundSubtractorMOG([history, nmixtures, backgroundRatio[, noiseSigma]]) -> <BackgroundSubtractorMOG object>
BackgroundSubtractorMOG2(...)
    BackgroundSubtractorMOG2([history, varThreshold[, bShadowDetection]]) -> <BackgroundSubtractorMOG2 object>
>>>bg_model = cv2.BackgroundSubtractorMOG2(0, 10)
Traceback (most recent call last):
  File "/home/manivannan/pythonexamle/opencv/Samples/hand-gesture-recognition-opencv/HandRecognition.py", line 233, in <module>
    bg_model = cv2.BackgroundSubtractorMOG2(0, 10)
AttributeError: 'module' object has no attribute 'BackgroundSubtractorMOG2'
>>>bg_model = cv2.createBackgroundSubtractorMOG2(0, 10)

Use createBackgroundSubtractorMOG2 instead of BackgroundSubtractorMOG2 It's Working

According to https://docs.opencv.org/master/db/d5c/tutorial_py_bg_subtraction.html You should use cv.bgsegm.createBackgroundSubtractorMOG()

I tested it on 3.4.0-dev and it worked.

Example Code:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture('vtest.avi')
fgbg = cv.bgsegm.createBackgroundSubtractorMOG()
while(1):
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)
    cv.imshow('frame',fgmask)
    k = cv.waitKey(30) & 0xff
    if k == 27:
        break
cap.release()
cv.destroyAllWindows()