openCV识别车辆及每辆车速检测代码
时间: 2023-08-03 21:06:13 浏览: 298
OpenCV车辆识别
4星 · 用户满意度95%
以下是使用OpenCV进行车辆检测和速度检测的代码示例:
```python
import cv2
import numpy as np
# 加载视频文件
cap = cv2.VideoCapture('traffic.mp4')
# 创建 Background Subtractor 对象
fgbg = cv2.createBackgroundSubtractorMOG2()
# 定义检测车辆的函数
def detect_cars(frame):
# 将帧转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 使用高斯滤波器平滑图像
blur = cv2.GaussianBlur(gray, (5, 5), 0)
# 应用 Background Subtractor
fgmask = fgbg.apply(blur)
# 进行形态学操作,以去除噪点和填补空洞
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
closing = cv2.morphologyEx(fgmask, cv2.MORPH_CLOSE, kernel)
# 找到轮廓
contours, hierarchy = cv2.findContours(closing, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 对象列表
cars = []
# 对每个轮廓进行处理
for cnt in contours:
# 计算轮廓的区域
area = cv2.contourArea(cnt)
# 如果轮廓的区域太小,则忽略它
if area < 1000:
continue
# 创建外接矩形
rect = cv2.minAreaRect(cnt)
box = cv2.boxPoints(rect)
box = np.int0(box)
# 计算车辆的速度
speed = calculate_speed(rect[0][1], frame.shape[0])
# 将车辆的坐标和速度添加到对象列表中
cars.append((box, speed))
# 在帧上绘制车辆的外接矩形
cv2.drawContours(frame, [box], 0, (0, 255, 0), 2)
return cars
# 定义计算速度的函数
def calculate_speed(y, height):
# 设置相机高度和焦距
camera_height = 3.0 # meters
focal_length = 0.01 # meters
# 计算车辆的速度
pixel_height = height - y
real_height = (camera_height * pixel_height) / focal_length
speed = real_height * 30 / 1000 # km/h
return speed
# 处理视频帧
while True:
# 读取视频帧
ret, frame = cap.read()
# 如果无法读取帧,则退出循环
if not ret:
break
# 检测车辆
cars = detect_cars(frame)
# 在帧上显示速度信息
for car in cars:
cv2.putText(frame, '{:.2f} km/h'.format(car[1]), (car[0][0][0], car[0][0][1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(0, 255, 0), 2)
# 显示帧
cv2.imshow('frame', frame)
# 按下 q 键退出循环
if cv2.waitKey(1) == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
```
该代码使用MOG2背景减除器进行车辆检测。它还计算每辆车的速度,并将速度信息显示在帧上。请注意,计算速度需要知道相机的高度和焦距。在本示例中,相机高度设置为3米,焦距设置为0.01米。您需要根据您自己的相机设置进行调整。
阅读全文