python+yolov3视频车辆检测代码

news/2024/7/11 0:43:26 标签: python, YOLO, 音视频

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

import cv2
import numpy as np

def contour_check_car():
    url_temp = "rtsp://xxxx:xxxxxx@192.168.2.176:554/h264/ch1/sub/av_stream"
    # 打开视频文件
    cap = cv2.VideoCapture(url_temp)

    # 定义感兴趣区域(ROI)的坐标和大小
    roi_x, roi_y, roi_width, roi_height = 150, 150, 50, 20

    # 初始化前一帧
    ret, prev_frame = cap.read()

    # 初始化计数器
    count = 0
    object_in_roi = False

    while True:
        ret, frame = cap.read()

        if not ret:
            break

        # 将当前帧和前一帧相减
        frame_diff = cv2.absdiff(prev_frame, frame)

        # 将差异图像转换为灰度图像
        gray_diff = cv2.cvtColor(frame_diff, cv2.COLOR_BGR2GRAY)

        # 应用阈值来检测运动物体
        _, thresh = cv2.threshold(gray_diff, 30, 255, cv2.THRESH_BINARY)

        # 查找差异图像中的轮廓
        contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        # 绘制矩形框以标记运动物体,并进行计数
        for contour in contours:
            if cv2.contourArea(contour) > 10:  # 根据需要调整面积阈值
                x, y, w, h = cv2.boundingRect(contour)
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

                # 检查物体是否进入ROI
                if x >= roi_x and y >= roi_y and x + w <= roi_x + roi_width and y + h <= roi_y + roi_height:
                    if not object_in_roi:
                        count += 1
                        object_in_roi = True
                else:
                    object_in_roi = False

        # 显示计数结果
        cv2.putText(frame, f"Count: {count}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

        # 更新前一帧
        prev_frame = frame.copy()

        # 在帧上绘制ROI区域
        cv2.rectangle(frame, (roi_x, roi_y), (roi_x + roi_width, roi_y + roi_height), (0, 255, 0), 2)

        # 显示帧
        cv2.imshow("Motion Detection and Counting", frame)

        # 退出循环
        if cv2.waitKey(30) & 0xFF == 27:
            break

    # 释放资源
    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    car_detector()

http://www.niftyadmin.cn/n/5094361.html

相关文章

泛在电力物联网的关键技术与未来发展策略-安科瑞黄安南

摘要: 文章分析了泛在电力物联网的内涵及其主要特征&#xff0c;针对泛在电力物联网的建设目标、基本构架以及关键技术与未来发展策略进行综合探讨&#xff0c;期待得到专业人士的指点。 关键词: 泛在电力物联网&#xff0c; 网络规划&#xff0c; 网络发展 随着能源革命的不…

达梦数据库适配ServiceStack框架

注&#xff1a;达梦的驱动版本请使用2023第四季度及以后版本驱动才可以 ServiceStack介绍 ServiceStack官网&#xff1a; https://github.com/ServiceStack/ServiceStack ServiceStack是一个开源的十分流行的WebService框架&#xff0c;引用其官网的介绍&#xff1a;“Servic…

Linux系统编程详解

Linux 多线程编程 什么是线程&#xff1f; 与线程类似&#xff0c;线程是允许应用程序并发执行多个任务的一种机制 线程是轻量级的进程&#xff08;LWP&#xff1a;Light Weight Process&#xff09;&#xff0c;在 Linux 环境下线程的本 质仍是进程。 一个进程可以包含多个线…

docker部署多个node-red操作过程

docker部署多个node-red操作过程 一、docker安装教程二、docker安装node-red2.1 拉取镜像2.2 创建目录并分配权限 三、 docker操作node-red3.1 部署node-red3.2 查看\关闭\删除容器 四、Docker删除Redis镜像 回到目录 一、docker安装教程 【docker使用安装教程】 回到目录 …

前端组件封装:构建模块化、可维护和可重用的前端应用

前端组件封装&#xff1a;构建模块化、可维护和可重用的前端应用 前端开发领域的快速演进已经将前端应用的规模和复杂性提升到了一个新的水平。在这个背景下&#xff0c;前端组件封装成为了一项关键实践&#xff0c;旨在构建模块化、可维护和可重用的前端应用。在本文中&#…

uniapp安卓 华为商店 vivo商店 oppo 小米 上架问题 Android中怎么才能不提前申请权限

问题描述 提交 小米 oppo 市场审核失败&#xff0c;原因是提前向用户申请开启通讯录、定位、短信、录音、相机和日历等权限。 解决方案&#xff1a; 是否有使用 READ_PHONE_STATE 权限&#xff0c;如果有使用 oaid 代替&#xff1b;是否有使用第三方 SDK&#xff0c;如果有关…

【前端设计模式】之备忘录模式

备忘录模式是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。在前端开发中&#xff0c;备忘录模式可以用于保存和恢复用户界面的状态&#xff0c;以及实现撤销和重做功能。 备忘录模式特性&#xff1a; 封装了对象的状态&#xff1a;备…

L003748-AR 3BSX108237R300 需插入以太网电缆并给设备通电

L003748-AR 3BSX108237R300 需插入以太网电缆并给设备通电 Auto-IP是自动为替换设备分配固定IP地址的最简单、最具成本效益的方法&#xff01;避免DHCP选项82的复杂性和硬件特定要求。Auto-IP将为您配置一个简单的“即插即用”机制。只需插入以太网电缆并给设备通电。每当您需…