web-dev-qa-db-fra.com

OpenCV2 Python module createBackgroundSubtractor introuvable

J'essaie d'utiliser la méthode cv2.createBackgroundSubtractorMOG2 () en Python. J'ai essayé à la fois sur mon Mac et sur mon Raspberry Pi, et j'obtiens la même erreur lors de l'exécution de la ligne de code suivante:

fgbg = cv2.createBackgroundSubtractorMOG2()

Le code que j'utilise provient de https://github.com/abidrahmank/OpenCV2-Python-Tutorials/blob/master/source/py_tutorials/py_video/py_bg_subtraction/py_bg_subtraction.rst

J'obtiens l'erreur suivante lors de l'exécution de ce code:

fgbg = cv2.createBackgroundSubtractorMOG2 () AttributeError: l'objet 'module' n'a pas d'attribut 'createBackgroundSubtractorMOG2'

Je n'arrive pas à utiliser l'une des méthodes createBackgroundSubtractor.

J'essaie de résoudre ce problème depuis un jour, mais je n'ai pas eu de chance à chercher en ligne, car le support de cv2 sur Python est limité.

Merci d'avance

17
user2765323

Remplacez la création .... par

fgbg = cv2.BackgroundSubtractorMOG ()

32
user2897775

cv2.createbackgroundSubstractor() fonctionne dans cv 3.0 pour 2.4.x utilisez cv2.BackgroundSubstractor()

12
fury

J'utilise

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

et python 2.7.12. Pendant que j'essayais d'utiliser cv2.createBackgroundSubtractorMOG (), j'ai reçu le même message d'erreur (également essayé sans "créer ..."). Mais j'ai été surpris lorsque j'ai découvert cv2.createBackgroundSubtractorKNN () avec la même fonctionnalité à la place ... et le code de test fonctionne :) 2 jours, j'étais confus et je n'ai pas pu trouver où était le problème.

5
Ievgen S.

Merci à tous pour les commentaires. Il semble que createBackgroundSubtractorMOG2 () n'ait pas été ajouté à OpenCV 2.4, mais il est présent dans la branche master, qui peut être compilée à partir de github.

Je trouve que cv2.BackgroundSubtractor () fonctionne pour ce dont j'ai besoin en ce moment.

Voir http://code.opencv.org/issues/2812#note-5 pour plus de détails.

4
user2765323

J'utilise OpenCV-python 2.4.9 et Python2.7.8.

Dans mon environnement, cv2.BackgroundSubtracorMOG et cv2.BackgroundSubtractorMOG2 sont disponibles.

Vous pouvez découvrir quels attributs sont disponibles en utilisant "help (cv2)" dans votre shell python.

BackgroundSubtractorMOG(...)
    BackgroundSubtractorMOG([history, nmixtures, backgroundRatio[, noiseSigma]]) -> <BackgroundSubtractorMOG object>

BackgroundSubtractorMOG2(...)
    BackgroundSubtractorMOG2([history, varThreshold[, bShadowDetection]]) -> <BackgroundSubtractorMOG2 object>
2
wata
>>> 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)

Utilisez createBackgroundSubtractorMOG2 au lieu de BackgroundSubtractorMOG2 Ça marche

1

Selon https://docs.opencv.org/master/db/d5c/tutorial_py_bg_subtraction.html Vous devez utiliser cv.bgsegm.createBackgroundSubtractorMOG()

Je l'ai testé sur 3.4.0-dev et cela a fonctionné.

Exemple de 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()
1
Qin Heyang