我正在尝试使用默认函数对视频文件进行背景扣除 我正在使用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)
有什么想法吗?
答案 0 :(得分:3)
在opencv 3中,他们更改了一些功能名称,你必须改变:
bkgnd = cv2.bgsegm.BackgroundSubtractorMOG()
为:
cv2.bgsegm.createBackgroundSubtractorMOG()
另一个观察结果是apply函数的结果是二进制图像,因此没有必要进行从RGB
到gray
的转换。您无需使用命令: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)