当前位置: 首页 > news >正文

opencv实战项目-停车位计数

手势识别系列文章目录
手势识别是一种人机交互技术,通过识别人的手势动作,从而实现对计算机、智能手机、智能电视等设备的操作和控制。

1.  opencv实现手部追踪(定位手部关键点)

2.opencv实战项目 实现手势跟踪并返回位置信息(封装调用)

3.手势识别-手势音量控制(opencv)

4.opencv实战项目 手势识别-手势控制鼠标

5.opencv实战项目 手势识别-手部距离测量

6.opencv实战项目 手势识别-实现尺寸缩放效果

未完待续
 

目录

1.简介

2.代码思路

 3.代码详解


 

opencv 的图像结果

 

代码需要用到opencv  cvzone模块   pickle模块

1.简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能,旨在帮助开发者在各种应用领域中实现图像处理、分析和计算机视觉任务

  1. 功能丰富:OpenCV提供了广泛的图像处理、计算机视觉、机器学习和深度学习功能。这些功能包括图像增强、特征提取、对象检测、人脸识别、图像分割、运动跟踪等。

  2. 跨平台:OpenCV是跨平台的,可以在多种操作系统上运行,包括Windows、Linux、macOS等。

  3. 多语言支持:OpenCV支持多种编程语言,如C++、Python、Java等。这使得开发者可以使用自己熟悉的编程语言来使用OpenCV库。

  4. 高效优化:OpenCV库被优化用于高性能计算。它使用了硬件加速、并行处理和优化算法,以在各种硬件平台上提供高效的计算速度。

  5. 图像和视频处理:OpenCV支持从图像文件和摄像头中读取图像和视频数据。它可以进行图像预处理、过滤、几何变换、颜色空间转换等。

  6. 计算机视觉任务:OpenCV包括各种计算机视觉任务的算法和功能,如物体检测、人脸识别、手势识别、运动跟踪、目标追踪等。

  7. 深度学习集成:OpenCV也集成了一些深度学习框架,如TensorFlow和PyTorch,使得开发者可以结合深度学习模型来执行更复杂的视觉任务。

  8. 开源社区:OpenCV是一个活跃的开源项目,有着庞大的开发者社区。这意味着你可以找到大量的教程、示例代码和解决方案,帮助你解决各种视觉问题。

     

2.代码思路

  1. 视频输入与读取

    • 通过cv2.VideoCapture打开一个视频文件作为输入。
    • 使用cap.read()读取视频的每一帧图像。
  2. 图像预处理

    • 将每一帧图像转换为灰度图像,以简化后续处理。
    • 对灰度图像应用高斯模糊,减少图像中的噪声。
    • 使用自适应阈值方法将图像分割为前景(车辆)和背景(停车位)。
  3. 停车位检测checkParkingSpace函数):

    • 针对预定义的停车位位置(从文件加载得到),在阈值图像中提取每个停车位的区域。
    • 使用cv2.countNonZero计算每个停车位区域内非零(白色)像素的数量。这相当于计算了停车位区域内的白色像素数量,用于判断是否有车辆停放在该位置。
    • 根据计算出的非零像素数量,判断停车位是否空闲。如果非零像素数量低于某个阈值(例如900),则认为停车位为空闲;否则认为停车位被占用。
    • 在原始图像上,使用矩形框和文本标记出停车位的状态,以及区域内非零像素的数量。
  4. 结果显示

    • 在图像上绘制检测结果,使用不同的颜色标记空闲和占用的停车位,以及停车位区域内的像素数量信息。
    • 在图像上绘制空闲停车位的总数量,以及总停车位数量。
  5. 循环处理

    • 循环处理视频的每一帧,重复上述步骤。
    • 如果视频处理完毕,重置视频的位置,以便重新播放视频。

 

 3.代码详解

import cv2
import pickle
import cvzone
import numpy as np# Video feed
cap = cv2.VideoCapture('carPark.mp4')with open('CarParkPos', 'rb') as f:posList = pickle.load(f)width, height = 107, 48def checkParkingSpace(imgPro):spaceCounter = 0for pos in posList:x, y = posimgCrop = imgPro[y:y + height, x:x + width]# cv2.imshow(str(x * y), imgCrop)count = cv2.countNonZero(imgCrop)if count < 900:color = (0, 255, 0)thickness = 5spaceCounter += 1else:color = (0, 0, 255)thickness = 2cv2.rectangle(img, pos, (pos[0] + width, pos[1] + height), color, thickness)cvzone.putTextRect(img, str(count), (x, y + height - 3), scale=1,thickness=2, offset=0, colorR=color)cvzone.putTextRect(img, f'Free: {spaceCounter}/{len(posList)}', (100, 50), scale=3,thickness=5, offset=20, colorR=(0,200,0))
while True:if cap.get(cv2.CAP_PROP_POS_FRAMES) == cap.get(cv2.CAP_PROP_FRAME_COUNT):cap.set(cv2.CAP_PROP_POS_FRAMES, 0)success, img = cap.read()imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)imgBlur = cv2.GaussianBlur(imgGray, (3, 3), 1)imgThreshold = cv2.adaptiveThreshold(imgBlur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV, 25, 16)imgMedian = cv2.medianBlur(imgThreshold, 5)kernel = np.ones((3, 3), np.uint8)imgDilate = cv2.dilate(imgMedian, kernel, iterations=1)checkParkingSpace(imgDilate)cv2.imshow("Image", img)# cv2.imshow("ImageBlur", imgBlur)# cv2.imshow("ImageThres", imgMedian)cv2.waitKey(10)

代码讲解

  1. 导入所需的库:

    • cv2:OpenCV库,用于图像处理和计算机视觉任务。
    • pickle:用于序列化和反序列化Python对象。
    • cvzone:这是一个基于OpenCV的库,用于在图像上绘制文本和形状。
    • numpy:用于数组操作和数学计算。
  2. 打开视频文件并读取停车位位置信息:

    • cap = cv2.VideoCapture('carPark.mp4'):打开名为'carPark.mp4'的视频文件作为输入。
    • with open('CarParkPos', 'rb') as f::使用二进制模式打开名为'CarParkPos'的文件,其中包含停车位的位置信息。
    • posList = pickle.load(f):从文件中加载停车位位置信息,并将其存储在posList变量中。
  3. 定义一个用于检查停车位空闲情况的函数checkParkingSpace(imgPro)

    • spaceCounter用于计算空闲停车位的数量。
    • 循环遍历每个停车位的位置信息。
    • 从输入图像中提取与当前停车位位置对应的区域,即imgCrop
    • 使用cv2.countNonZero(imgCrop)计算该区域中非零像素的数量(即白色像素数量)。
    • 如果非零像素数量小于900,表示该停车位空闲,将矩形框和文本标记为绿色,计数器增加。
    • 否则,表示停车位已被占用,将矩形框和文本标记为红色。
  4. 进入主循环:

    • 循环用于处理视频帧。
    • 首先检查是否已经到达视频的末尾,如果是,则将视频的位置重置到开头。
    • 使用cap.read()读取视频的下一帧图像。
    • 将图像转换为灰度图像,然后应用高斯模糊、自适应阈值等图像处理步骤,以提取停车位的信息。
    • 调用之前定义的checkParkingSpace()函数,传入经过处理的图像。
    • 在图像上绘制检测结果的矩形框和文本信息。
    • 使用cv2.imshow()显示处理后的图像,并等待用户按键(cv2.waitKey(10))。

视频文件

链接:https://pan.baidu.com/s/1TiNlSBF6I1lHvEr2YIxlBA 
提取码:8vw3

有遇到的问题欢迎评论区留言

相关文章:

opencv实战项目-停车位计数

手势识别系列文章目录 手势识别是一种人机交互技术&#xff0c;通过识别人的手势动作&#xff0c;从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪&#xff08;定位手部关键点&#xff09; 2.opencv实战项目 实现手势跟踪并返回位置信息&a…...

NLP文本匹配任务Text Matching [无监督训练]:SimCSE、ESimCSE、DiffCSE 项目实践

NLP文本匹配任务Text Matching [无监督训练]&#xff1a;SimCSE、ESimCSE、DiffCSE 项目实践 文本匹配多用于计算两个文本之间的相似度&#xff0c;该示例会基于 ESimCSE 实现一个无监督的文本匹配模型的训练流程。文本匹配多用于计算两段「自然文本」之间的「相似度」。 例如…...

复习vue3,简简单单记录

这里的知识是结合视频以及其他文章一起学习&#xff0c;仅用于个人复习记录 ref 和reactive ref 用于基本类型 reactive 用于引用类型 如果使用ref 传递对象&#xff0c;修改值时候需要写为obj.value.attr 方式修改属性值 如果使用reactive 处理对象&#xff0c;直接obj.att…...

【自用】云服务器 docker 环境下 HomeAssistant 安装 HACS 教程

一、进入 docker 中的 HomeAssistant 1.查找 HomeAssistant 的 CONTAINER ID 连接上云服务器&#xff08;宿主机&#xff09;后&#xff0c;终端内进入 root &#xff0c;输入&#xff1a; docker ps找到了 docker 的 container ID 2.config HomeAssistant 输入下面的命令&…...

使用dockerfile手动构建JDK11镜像运行容器并校验

Docker官方维护镜像的公共仓库网站 Docker Hub 国内无法访问了&#xff0c;大部分镜像无法下载&#xff0c;准备逐步构建自己的镜像库。【转载aliyun官方-容器镜像服务 ACR】Docker常见问题 阿里云容器镜像服务ACR&#xff08;Alibaba Cloud Container Registry&#xff09;是面…...

编程语言学习笔记-架构师和工程师的区别,PHP架构师之路

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…...

Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)

文章目录 1 前言2 st.line_chart&#xff1a;绘制线状图3 st.area_chart&#xff1a;绘制面积图4 st.bar_chart&#xff1a;绘制柱状图5 st.pyplot&#xff1a;绘制自定义图表6 结语 1 前言 在数据可视化的世界中&#xff0c;绘制清晰、易于理解的图表是非常关键的。Streamlit…...

其他行业跳槽转入计算机领域简单看法

其他行业跳槽转入计算机领域简单看法 本人选择从以下几个方向谈谈自己的想法和观点。 先看一下总体图&#xff0c;下面会详细分析 如何规划才能实现转码 自我评估和目标设定&#xff1a;首先&#xff0c;你需要评估自己的技能和兴趣&#xff0c;确定你希望在计算机领域从事…...

Unity制作一个简单的登入注册页面

1.创建Canvas组件 首先我们创建一个Canvas画布&#xff0c;我们再在Canvas画布底下创建一个空物体&#xff0c;取名为Resgister。把空物体的锚点设置为全屏撑开。 2.我们在Resgister空物体底下创建一个Image组件&#xff0c;改名为bg。我们也把它 的锚点设置为全屏撑开状态。接…...

常用游戏运营指标DAU、LTV及参考范围

文章目录 前言运营指标指标范围参考值留存指标的意义总结 前言 作为游戏人免不了听到 DAU 、UP值、留存 等名词&#xff0c;并且有些名词听起来还很像&#xff0c;特别是一款上线的游戏&#xff0c;这些游戏运营指标是衡量游戏业务绩效和用户参与度的重要数据&#xff0c;想做…...

标准模板库STL——deque和list

deque概述 deque属于顺序容器&#xff0c;称为双端队列容器 底层数据结构是动态二维数组&#xff0c;从整体上看&#xff0c;deque的内存不连续 初始数组第一维数量为2&#xff0c;必要时进行2倍扩容 每次第一维扩容后&#xff0c;原来数组第二维元素从新数组下标为OldSize/2的…...

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-BiGRU-Attention多特征分类预测&#xff0c;多特征输入模型&…...

C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象

第十章 类与对象 在面向对象编程中&#xff0c;类和对象是两个重要的概念。 类&#xff08;Class&#xff09;是一种用户自定义的数据类型&#xff0c;用于封装数据和操作。它是对象的模板或蓝图&#xff0c;描述了对象的属性&#xff08;成员变量&#xff09;和行为&#xf…...

基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

使用基于C的OpenCV库来绘制多边形&#xff0c;并且为多边形的不同边使用不同的颜色&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件&#xff1a; #include <opencv2/opencv.hpp&g…...

(六)、深度学习框架中的算子

1、深度学习框架算子的基本概念 深度学习框架中的算子&#xff08;operator&#xff09;是指用于执行各种数学运算和操作的函数或类。这些算子通常被用来构建神经网络的各个层和组件&#xff0c;实现数据的传递、转换和计算。 算子是深度学习模型的基本组成单元&#xff0c;它们…...

Redis实现共享Session

Redis实现共享Session 分布式系统中&#xff0c;sessiong共享有很多的解决方案&#xff0c;其中托管到缓存中应该是最常用的方案之一。 1、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM…...

网络通信原理UDP协议(第五十课)

UDP协议:用户数据包协议,无连接、不可靠,效率高 字段长度描述Source Port2字节标识哪个应用程序发送(发送进程)。Destination Port2字节标识哪个应用程序接收(接收进程)。Length2字节UDP首部加上UDP数据的字节数,最小为8。Checksum2字节覆盖UDP首部和UDP数据,是可…...

43、TCP报文(一)

本节内容开始&#xff0c;我们正式学习TCP协议中具体的一些原理。首先&#xff0c;最重要的内容仍然是这个协议的封装结构和首部格式&#xff0c;因为这里面牵扯到一些环环相扣的知识点&#xff0c;例如ACK、SYN等等&#xff0c;如果这些内容不能很好的理解&#xff0c;那么后续…...

【JavaScript】使用js实现滑块验证码功能与浏览器打印

滑块验证码 效果图&#xff1a; 实现思路&#xff1a; 根据滑块的最左侧点跟最右侧点&#xff0c; 是否在规定的距离内【页面最左侧为原点】&#xff0c;来判断是否通过 html代码&#xff1a; <!DOCTYPE html> <html><head><title>滑动图片验证码&…...

【使用群晖远程链接drive挂载电脑硬盘】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...