python+yolov3视频车辆检测代码

布满荆棘的人生 2024-02-21 07:10 130阅读 0赞

python+yolov3视频车辆检测代码
IDE工具:pycharm 2023
后端语言:python 3.11

  1. import cv2
  2. import numpy as np
  3. def contour_check_car():
  4. url_temp = "rtsp://xxxx:xxxxxx@192.168.2.176:554/h264/ch1/sub/av_stream"
  5. # 打开视频文件
  6. cap = cv2.VideoCapture(url_temp)
  7. # 定义感兴趣区域(ROI)的坐标和大小
  8. roi_x, roi_y, roi_width, roi_height = 150, 150, 50, 20
  9. # 初始化前一帧
  10. ret, prev_frame = cap.read()
  11. # 初始化计数器
  12. count = 0
  13. object_in_roi = False
  14. while True:
  15. ret, frame = cap.read()
  16. if not ret:
  17. break
  18. # 将当前帧和前一帧相减
  19. frame_diff = cv2.absdiff(prev_frame, frame)
  20. # 将差异图像转换为灰度图像
  21. gray_diff = cv2.cvtColor(frame_diff, cv2.COLOR_BGR2GRAY)
  22. # 应用阈值来检测运动物体
  23. _, thresh = cv2.threshold(gray_diff, 30, 255, cv2.THRESH_BINARY)
  24. # 查找差异图像中的轮廓
  25. contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  26. # 绘制矩形框以标记运动物体,并进行计数
  27. for contour in contours:
  28. if cv2.contourArea(contour) > 10: # 根据需要调整面积阈值
  29. x, y, w, h = cv2.boundingRect(contour)
  30. cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
  31. # 检查物体是否进入ROI
  32. if x >= roi_x and y >= roi_y and x + w <= roi_x + roi_width and y + h <= roi_y + roi_height:
  33. if not object_in_roi:
  34. count += 1
  35. object_in_roi = True
  36. else:
  37. object_in_roi = False
  38. # 显示计数结果
  39. cv2.putText(frame, f"Count: {count}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
  40. # 更新前一帧
  41. prev_frame = frame.copy()
  42. # 在帧上绘制ROI区域
  43. cv2.rectangle(frame, (roi_x, roi_y), (roi_x + roi_width, roi_y + roi_height), (0, 255, 0), 2)
  44. # 显示帧
  45. cv2.imshow("Motion Detection and Counting", frame)
  46. # 退出循环
  47. if cv2.waitKey(30) & 0xFF == 27:
  48. break
  49. # 释放资源
  50. cap.release()
  51. cv2.destroyAllWindows()
  52. if __name__ == '__main__':
  53. car_detector()

发表评论

表情:
评论列表 (有 0 条评论,130人围观)

还没有评论,来说两句吧...

相关阅读

    相关 膨胀腐蚀对静态车辆检测

    场景 前期进行了二值化处理,车辆和道路存在连通区域,实际上,就没有必要再次进行形态学的算法处理,不过为了练习使用膨胀和腐蚀,并且了解函数的基本使用,还是进行了处理