在上方代码的基础上加入绘制矩形框中心店轨迹的代码
时间: 2024-06-10 18:04:51 浏览: 41
好的,下面是在代码中加入绘制矩形框中心点轨迹的代码:
```python
import cv2
# 循环每一帧
while cap.isOpened():
# 读取视频帧
ret, frame = cap.read()
if ret:
# 调整图像的大小,降低算法计算复杂度
frame = cv2.resize(frame, (640, 360))
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 对图像进行高斯模糊,降低噪声
gray = cv2.GaussianBlur(gray, (21, 21), 0)
# 初始化背景
if bg is None:
bg = gray.copy().astype("float")
continue
# 计算当前帧与背景之间的绝对差值,并进行二值化处理
diff = cv2.absdiff(bg.astype("uint8"), gray)
thresh = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)[1]
# 扩展阈值图像的轮廓
thresh = cv2.dilate(thresh, None, iterations=2)
# 查找轮廓
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
# 循环处理每个检测到的轮廓
for c in cnts:
# 忽略面积过小的轮廓
if cv2.contourArea(c) < min_area:
continue
# 计算轮廓的外框
(x, y, w, h) = cv2.boundingRect(c)
# 绘制矩形框及标签
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame, "Movement", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 计算矩形框中心点坐标
center_x = x + w // 2
center_y = y + h // 2
# 保存矩形框中心点坐标
trajectory.append((center_x, center_y))
# 绘制中心点轨迹
for i in range(1, len(trajectory)):
cv2.line(frame, trajectory[i - 1], trajectory[i], (255, 0, 0), 2)
# 显示处理后的视频帧
cv2.imshow("Security Feed", frame)
key = cv2.waitKey(1) & 0xFF
# 如果用户按下q键,则退出循环
if key == ord("q"):
break
else:
break
# 释放摄像头并关闭展示窗口
cap.release()
cv2.destroyAllWindows()
```
需要注意的是,添加轨迹时需要在外层添加一个列表,用于保存矩形框中心点的坐标。并且,在绘制轨迹时需要通过循环遍历存储在列表中的中心点坐标,并且使用cv2.line()函数绘制轨迹。
阅读全文