簡體   English   中英

“模塊”對象沒有屬性“BackgroundSubtractorMOG”

[英]'Module' object has no attribute 'BackgroundSubtractorMOG'

我正在嘗試使用默認函數對視頻文件進行背景減法。
我正在使用 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)

有任何想法嗎?

在 opencv 3 中,他們更改了一些函數的名稱,您必須更改:

bkgnd = cv2.bgsegm.BackgroundSubtractorMOG() 

到:

cv2.bgsegm.createBackgroundSubtractorMOG()

另一個觀察結果是 apply 函數的結果是一個二值圖像,因此沒有必要進行從RGBgray的轉換。 您不需要使用命令: cv2.cvtColor(img_sub, cv2.COLOR_BGR2GRAY)

這很好用..

fgbg = cv2.BackgroundSubtractorMOG2()

PS:我使用的是 python 3.5 和 cv2 版本 3.3.1

如果您使用的是 opencv 4,則應該使用帶有歷史記錄、varThreshold、detectShadows 參數的 MOG2

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM