'Module' 对象没有属性 '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: error:
(-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)
有什么想法吗?
在opencv 3中他们改变了一些函数的名字,你必须改变:
bkgnd = cv2.bgsegm.BackgroundSubtractorMOG()
至:
cv2.bgsegm.createBackgroundSubtractorMOG()
另一个观察是apply函数的结果是二值图像,所以没有必要做从RGB
到gray
的转换。您不需要使用命令:cv2.cvtColor(img_sub, cv2.COLOR_BGR2GRAY)
这很好..
fgbg = cv2.BackgroundSubtractorMOG2()
P.S: 我正在使用 python 3.5 和 cv2 版本 3.3.1
如果您使用的是 opencv 4,则应将 MOG2 与 history、varThreshold、detectShadows 参数一起使用
cv2.createBackgroundSubtractorMOG2(history=100,varThreshold=50,detectShadows=True)
我正在尝试使用默认函数对视频文件进行背景减法。
我正在使用 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: error: (-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)
有什么想法吗?
在opencv 3中他们改变了一些函数的名字,你必须改变:
bkgnd = cv2.bgsegm.BackgroundSubtractorMOG()
至:
cv2.bgsegm.createBackgroundSubtractorMOG()
另一个观察是apply函数的结果是二值图像,所以没有必要做从RGB
到gray
的转换。您不需要使用命令:cv2.cvtColor(img_sub, cv2.COLOR_BGR2GRAY)
这很好..
fgbg = cv2.BackgroundSubtractorMOG2()
P.S: 我正在使用 python 3.5 和 cv2 版本 3.3.1
如果您使用的是 opencv 4,则应将 MOG2 与 history、varThreshold、detectShadows 参数一起使用
cv2.createBackgroundSubtractorMOG2(history=100,varThreshold=50,detectShadows=True)