【问题标题】:'Module' object has no attribute 'BackgroundSubtractorMOG'“模块”对象没有属性“BackgroundSubtractorMOG”
【发布时间】:2020-12-17 05:39:32
【问题描述】:

我正在尝试使用默认函数对视频文件进行背景减法。
我正在使用 Python 2.7 和 OpenCV。
使用“BackgroundSubtractorMOG”模块时收到此错误:

'module' object has no attribute 'BackgroundSubtractorMOG'

现在,如果我尝试使用 createBackgroundSubtractorMOG() 模块,我会收到同样的错误。
如果我将代码更改为:

bkgnd = cv2.bgsegm.BackgroundSubtractorMOG()

稍后我收到一个错误,试图告诉我我使用的是 OpenCV 3.1(尽管我很确定我不是)。

 img_sub_gray_image = cv2.cvtColor(img_sub, cv2.COLOR_BGR2GRAY) cv2.error:

/home/odroid/opencv-3.1.0/modules/imgproc/src/color.cpp:8000:错误: (-215) scn == 3 ||函数 cvtColor 中的 scn == 4

这是出错的代码段:

bkgnd = cv2.bgsegm.BackgroundSubtractorMOG() 
cap = cv2.VideoCapture('video.mp4')

while(True): 
    ret, frame = cap.read()

    #background subtraction
    img_sub = bkgnd.apply(frame)

    #convert to grayscale
    img_sub_gray_image = cv2.cvtColor(img_sub, cv2.COLOR_BGR2GRAY)
    #thresholding, forcing to binary image
    ret,threshold1 = cv2.threshold(img_sub_gray_image, LOWER_BOUND, UPPER_BOUND, cv2.THRESH_BINARY)

有什么想法吗?

【问题讨论】:

    标签: python opencv background-subtraction


    【解决方案1】:

    在opencv 3中他们改变了一些函数的名字,你必须改变:

    bkgnd = cv2.bgsegm.BackgroundSubtractorMOG() 
    

    到:

    cv2.bgsegm.createBackgroundSubtractorMOG()
    

    另一个观察是apply函数的结果是一个二值图像,所以没有必要做从RGBgray的转换。不需要使用命令:cv2.cvtColor(img_sub, cv2.COLOR_BGR2GRAY)

    【讨论】:

    • 将行更改为: bkgnd = cv2.bgsegm.createBackgroundSubtractorMOG() 我收到此错误:OpenCV 错误:断言失败 (scn == 3 || scn == 4) in cvtColor, file / home/odroid/opencv-3.1.0/modules/imgproc/src/color.cpp,第 8000 行 Traceback(最近一次调用最后一次):文件“FU_edge_detection_video_HoughLinesP.py”,第 60 行,在 img_sub_gray_image = cv2.cvtColor( img_sub, cv2.COLOR_BGR2GRAY) cv2.error: /home/odroid/opencv-3.1.0/modules/imgproc/src/color.cpp:8000: 错误: (-215) scn == 3 ||函数 cvtColor 中的 scn == 4
    • 明白了。谢谢你。当然现在我还有其他错误。但感谢您的帮助。
    【解决方案2】:

    这很好用..

    fgbg = cv2.BackgroundSubtractorMOG2()
    

    P.S:我使用的是 python 3.5 和 cv2 版本 3.3.1

    【讨论】:

      【解决方案3】:

      如果你使用的是 opencv 4,你应该使用 MOG2 和 history、varThreshold、detectShadows 参数

      cv2.createBackgroundSubtractorMOG2(history=100,varThreshold=50,detectShadows=True)
      

      【讨论】:

      • 请提供解释。
      猜你喜欢
      • 2017-03-29
      • 2013-02-13
      • 2010-11-18
      • 2019-01-03
      • 2017-05-19
      • 2013-02-01
      • 2018-02-27
      • 2016-05-04
      相关资源
      最近更新 更多