OpenCV2 Python createBackgroundSubtractor module not found
Asked Answered
D

7

17

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

Delrosario answered 10/9, 2013 at 14:25 Comment(8)
Which version of OpenCV binding are you using?Michaelson
I'm using OpenCV 2.4.6, which looks like the latest OpenCV version with Python 2.7.5Delrosario
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()Michaelson
code.opencv.org/issues/2812#note-5Atomizer
Great thanks, that makes sense, and cv2.BackgroundSubtractorMOG() is working. Do you have any idea when this will be resolved?Delrosario
Hi, I am the author of tutorial you referred. I have been using OpenCV compiled master branch from github, ie OpenCV 3 (not yet released). OpenCV 3 will have some important changes compared to present versions. And those tutorials you referred, are meant to be released with OpenCV 3. So if you want it, you can use OpenCV master branchShanteshantee
@AbidRahmanK - How do I get hold of that master branch? I am working on an undergrad thesis, and the deadline is in 5 weeks - I am building an intelligent security system on a Raspberry Pi using webcams. It is probably worth exploring OpenCV 3 though! Is there any documentation for it?Delrosario
Documentation also can be built while compiling master branch. I don't know about raspberry pi. From Python point of view, there are no "big" changes, but small ones like the one in your question. You can check those tutorials: opencv-python-tutroals.readthedocs.org/en/latest/index.html. And when you are stuck somewhere, feel free to come to SOF. that's how you learn anything. So just start coding with what you know, and if something doesn't work, try to solve it. I am sure you won't find much problems (since i didn't find much when I changed from 2 to 3.Shanteshantee
S
32

Replace the create.... with

fgbg = cv2.BackgroundSubtractorMOG()

Skimmer answered 30/12, 2013 at 21:3 Comment(0)
C
12

cv2.createbackgroundSubstractor() works in cv 3.0 for 2.4.x use cv2.BackgroundSubstractor()

Cann answered 16/6, 2014 at 16:44 Comment(2)
IMO this is not an answer but a comment.Conterminous
* cv2.BackgroundSubtractor()Pippa
R
5

I'm using

>>> import cv2
>>> cv2.__version__
>>> 3.2.0

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.

Rhombic answered 31/3, 2017 at 20:15 Comment(0)
D
4

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.

Delrosario answered 12/9, 2013 at 15:54 Comment(0)
M
2

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>
Mendes answered 19/10, 2014 at 4:16 Comment(0)
H
1
>>> import cv2
>>> cv2.__version__
>>> 3.2.0
>>>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

Hydrocortisone answered 4/9, 2017 at 17:14 Comment(0)
B
1

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()
Blasphemous answered 9/1, 2018 at 23:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.