[英]'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 函數的結果是一個二值圖像,因此沒有必要進行從RGB
到gray
的轉換。 您不需要使用命令: 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.