提供一段代码帮我实现动作检测的功能
时间: 2024-01-07 22:05:00 浏览: 63
以下是一个简单的动作检测的代码示例,它使用了 OpenCV 库和背景减除算法 MOG2:
```python
import cv2
# 初始化 MOG2 背景减除器
fgbg = cv2.createBackgroundSubtractorMOG2()
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取一帧视频
ret, frame = cap.read()
if not ret:
break
# 使用 MOG2 背景减除器计算前景掩膜
fgmask = fgbg.apply(frame)
# 对前景掩膜进行形态学操作,去除噪声
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
# 计算前景像素占总像素数的比例
fg_pixels = cv2.countNonZero(fgmask)
total_pixels = fgmask.shape[0] * fgmask.shape[1]
fg_ratio = fg_pixels / total_pixels
# 如果前景比例超过阈值,则认为有运动发生
if fg_ratio > 0.05:
print("Motion detected!")
# 在原始视频帧上绘制前景掩膜
frame = cv2.bitwise_and(frame, frame, mask=fgmask)
# 显示视频
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
```
这个代码示例中,我们使用了 MOG2 背景减除器来计算前景掩膜,然后对前景掩膜进行形态学操作,去除噪声,并计算前景像素占总像素数的比例,如果前景比例超过阈值,则认为有运动发生。最后,我们在原始视频帧上绘制前景掩膜,并显示视频。你可以根据自己的需要调整阈值和形态学操作的参数,以达到更好的效果。
阅读全文