运行cv2代码创建掩码时报builtin_function_or_method无apply属性错误
错误根因
cv2.createBackgroundSubtractorMOG2是背景分割器的构造函数,你没有加括号执行实例化操作,直接把函数对象本身赋值给了object_detector,因此调用apply方法时会触发属性不存在的报错。
修复代码
仅需修改实例化背景分割器的行即可,以下是完整可运行代码:
import cv2 import numpy as np cap = cv2.VideoCapture('file_name.mp4') # 新增括号调用构造函数生成实例,可自定义括号内参数 object_detector = cv2.createBackgroundSubtractorMOG2() while True: ret, frame = cap.read() # 额外添加视频读取结束的判断,避免视频播放完后触发报错 if not ret: break mask = object_detector.apply(frame) cv2.imshow('Cam Footage' , frame) cv2.imshow('Mask', mask) key = cv2.waitKey(30) if key == 27: break cap.release() cv2.destroyAllWindows()
可选参数说明
你可以根据需求调整构造函数的三个常用参数:
history:用于计算背景模型的历史帧数量,默认值为500varThreshold:像素与背景模型的差值阈值,超过阈值会被判定为前景,默认值为16detectShadows:是否检测阴影,开启后阴影会被标记为灰色,默认值为True
内容的提问来源于stack exchange,提问作者Drxj
相关产品推荐
相关产品推荐

