当前位置: 首页 > 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. 结语 前言 群晖作为专业的数据存储中心&…...

easyx图形库基础4:贪吃蛇

贪吃蛇 一实现贪吃蛇&#xff1a;1.绘制网格&#xff1a;1.绘制蛇&#xff1a;3.控制蛇的默认移动向右&#xff1a;4.控制蛇的移动方向&#xff1a;5.生成食物6.判断蛇吃到食物并且长大。7.判断游戏结束&#xff1a;8.重置函数&#xff1a; 二整体代码&#xff1a; 一实现贪吃蛇…...

哈夫曼树(赫夫曼树、最优树)详解

目录 哈夫曼树&#xff08;赫夫曼树、最优树&#xff09;详解 哈夫曼树相关的几个名词 什么是哈夫曼树 构建哈夫曼树的过程 哈弗曼树中结点结构 构建哈弗曼树的算法实现 哈夫曼树&#xff08;赫夫曼树、最优树&#xff09;详解 哈夫曼树相关的几个名词 路径&#xff1a;…...

智慧建筑工地平台,通过信息化技术、物联网、人工智能技术,实现对施工全过程的实时监控、数据分析、智能管理和优化调控

智慧工地是指通过信息化技术、物联网、人工智能技术等手段&#xff0c;对建筑工地进行数字化、智能化、网络化升级&#xff0c;实现对施工全过程的实时监控、数据分析、智能管理和优化调控。智慧工地的建设可以提高工地的安全性、效率性和质量&#xff0c;降低施工成本&#xf…...

Springboot 实践(8)springboot集成Oauth2.0授权包,对接spring security接口

此文之前&#xff0c;项目已经添加了数据库DAO服务接口、资源访问目录、以及数据访问的html页面&#xff0c;同时项目集成了spring security&#xff0c;并替换了登录授权页面&#xff1b;但是&#xff0c;系统用户存储代码之中&#xff0c;而且只注册了admin和user两个用户。在…...

OpenCV-Python中的图像处理-GrabCut算法交互式前景提取

OpenCV-Python中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode…) img…...

leetcode原题 后继者:找出二叉搜索树中指定节点的“下一个”节点

题目&#xff1a; 设计一个算法&#xff0c;找出二叉搜索树中指定节点的“下一个”节点&#xff08;也即中序后继&#xff09;。 如果指定节点没有对应的“下一个”节点&#xff0c;则返回null。 示例&#xff1a; 输入: root [2,1,3], p 1 2 / \ 1 3 输出: 2 解题思路…...

pyqt5 QlineEdit 如何设置只能输入数字

在 PyQt&#xff08;Python中的一个GUI库&#xff09;中&#xff0c;可以使用QLineEdit小部件的setValidator()方法来限制用户输入的内容。要让QLineEdit只能输入数字&#xff0c;你可以使用QIntValidator或QDoubleValidator。下面是一个示例代码&#xff0c;展示如何设置只能输…...

ubuntu中安装python

最简单方便的是 apt 使用第三方的 ppa 源&#xff0c;然后直接 apt 安装 python3.9 安装 software-properties-common 获取add-apt-repository命令&#xff1a;apt install -y software-properties-common添加第三方的 ppa 源&#xff1a;add-apt-repository ppa:deadsnakes/p…...

LeetCode150道面试经典题-- 快乐数(简单)

1.题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&am…...

科研论文配图----第一章笔记

第一章笔记 科研论文的绘制基础 科研论文配图的分类与构成 根据呈现方式&#xff0c;科研论文配图可分为线性图、灰度图、照片彩图和综合配图 4 种类型。 其中&#xff0c;线性图是主要和常用的配图类型&#xff0c;也是本书重点介绍的配图类型。 科研论文配图的格式和尺寸 格…...