用opencv实现车辆统计的代码
时间: 2024-02-12 20:09:02 浏览: 153
以下是使用 OpenCV 实现简单车辆统计的 Python 代码示例:
```python
import cv2
import numpy as np
# 设置视频文件名和输出文件名
video_file = 'video.mp4'
output_file = 'output.avi'
# 打开视频文件
cap = cv2.VideoCapture(video_file)
# 获取视频帧率和尺寸
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 定义车辆检测器
car_cascade = cv2.CascadeClassifier('cars.xml')
# 定义车辆计数器
car_count = 0
# 定义输出视频编码器和输出流
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output_file, fourcc, fps, (width, height))
# 读取视频并处理每一帧
while True:
# 读取视频帧
ret, frame = cap.read()
if not ret:
break
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 车辆检测
cars = car_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
# 绘制车辆框并统计车辆数量
for (x, y, w, h) in cars:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 2)
car_count += 1
# 在图像上显示车辆数量
cv2.putText(frame, 'Cars: {}'.format(car_count), (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# 将图像写入输出流
out.write(frame)
# 显示处理后的图像
cv2.imshow('frame', frame)
# 按下 q 键退出
if cv2.waitKey(1) == ord('q'):
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
```
该代码使用 Haar 级联分类器实现车辆检测,可以在 `car_cascade.detectMultiScale()` 函数中调整 scaleFactor 和 minNeighbors 参数以改变检测效果。同时,该代码可以将处理后的视频保存到输出文件中。
阅读全文