'Module'对象没有属性'BackgroundSubtractorMOG'

时间:2017-04-25 20:50:35

标签: python opencv background-subtraction

我正在尝试使用默认函数对视频文件进行背景扣除 我正在使用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 || scn == 4 in function cvtColor

以下是错误输出的代码段:

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)

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

在opencv 3中,他们更改了一些功能名称,你必须改变:

bkgnd = cv2.bgsegm.BackgroundSubtractorMOG() 

为:

cv2.bgsegm.createBackgroundSubtractorMOG()

另一个观察结果是apply函数的结果是二进制图像,因此没有必要进行从RGBgray的转换。您无需使用命令:cv2.cvtColor(img_sub, cv2.COLOR_BGR2GRAY)

答案 1 :(得分:0)

效果很好..

fgbg = cv2.BackgroundSubtractorMOG2()

P.S:我正在使用python 3.5和cv2版本3.3.1

答案 2 :(得分:0)

如果您使用的是opencv 4,则应将MOG2与历史记录,varThreshold,detectShadows参数一起使用

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