opencv运动目标检测
时间: 2023-09-16 22:16:23 浏览: 89
基于opencv的运动目标检测
4星 · 用户满意度95%
OpenCV是一个非常流行的计算机视觉库,提供了许多用于运动目标检测的功能。下面是一些实现运动目标检测的步骤:
1. 读取视频或者摄像头视频流
```python
import cv2
# 读取摄像头视频流
cap = cv2.VideoCapture(0)
# 读取本地视频文件
# cap = cv2.VideoCapture('test.mp4')
```
2. 定义背景减除器
背景减除器可以帮助我们从视频流中提取出前景物体,常用的有 MOG2 和 KNN 两种算法。
```python
# 创建背景减除器对象
fgbg = cv2.createBackgroundSubtractorMOG2()
```
3. 循环读取视频帧,进行运动目标检测
```python
while True:
# 读取一帧视频
ret, frame = cap.read()
# 对当前帧进行背景减除
fgmask = fgbg.apply(frame)
# 对背景减除后的结果进行二值化处理
thresh = cv2.threshold(fgmask, 30, 255, cv2.THRESH_BINARY)[1]
# 对二值化后的图像进行形态学操作
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
# 绘制检测框
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
if cv2.contourArea(c) < 500:
continue
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 显示视频帧
cv2.imshow('frame', frame)
# 退出条件
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
```
在上面的代码中,我们首先对每一帧视频进行背景减除,然后将结果进行二值化处理。接着,我们对二值化后的图像进行形态学操作,去除噪声和小物体。最后,我们使用cv2.findContours函数找到图像中的轮廓,并绘制检测框。
阅读全文