热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

OpenCV视频人数统计研究(转别人的)

最近有空研究了一下基于Opencv的视频人数统计。总结了一下,视频人数统计系统的工作流程主要包括以下几个部分:1.视频捕获从视频源(摄

        最近有空研究了一下基于Opencv的视频人数统计。总结了一下,视频人数统计系统的工作流程主要包括以下几个部分:

1.视频捕获

        从视频源(摄像头或视频文件)获取到视频图像数据。

2.目标提取(背景建模、前景分析)

        由视频图像分割出视频图像中的运动区域。

        常见的方法:高斯背景建模,帧差法,三帧差法。

3.目标识别(模式识别、特征点分析)

        根据目标特征分析得到具体目标。比如人脸识别、头肩部识别等。

        OpenCV里可以使用Haar特征 、级联分类器来进行目标检测。但分类器的训练需要从事先准备好的成百或上千张正面或反面样本中训练得到,整个过程会比较复杂,这种方法应该会达到很好的检测效果 。OpenCV也自带了一些已经训练好的包括人眼、人脸和人体的分类器(位于OpenCV安装目录\data\haarcascades目录下,分类器是XML类型的文件),可以直接使用这些分类器来进行图像检测,但由于使用的环境不同,这些分类器不一定是最优的,检测效果不一定会很好,这些现成的分类器只是提供了一个基本的参考,在实际使用时,还需要根据实际环境对分类器中的配置参数做一些调整和优化才能使检测结果比较准确。当然,此种方式的开销也会大,而且只有OpenCV2.0版本以上才支持,因此在嵌入式领域,这并不是一个很好的方式。

4.目标跟踪

       检测目标在每一帧的空间位置。从而得到目标的运动估计。

       基本方法:
       直方图特征匹配:根据目标区域的颜色直方图特征进行目标匹配。分别对运动目标的前后两帧计算颜色分布的直方图,如果两者的颜色直方图最接近,则认为目标匹配成功。

       运动目标连续性匹配:利用相邻两帧图像中待匹配的目标在时间和空间上的相关性。由于视频中相邻两帧间时间间隔很短,可以认为在相邻两帧间目标是做匀速运动。这样,可以根据当前目标的运动速度和方向来预计目标在下一帧的位置,如果下一帧的所有运动目标中存在与待匹配目标的预期位置最接近的,则认为目标匹配成功。

       OpenCV里可以使用CamShift算法直接对彩色图像进行跟踪。它的基本原理也是通过直方图特征来进行目标匹配。测试了一下,在对我使用的视频进行跟踪时,效果不是很理想,会出现误跟踪的情况,没有达到预期的效果,而且CamShift算法是直接对彩色图像进行跟踪,开销会比较大,这里并不是说CamShift算法不好,其实视频图像处理本身就跟具体的外界环境有关,每一种图像算法一般都是针对特定的环境,并不是通用的,在某些环境下,比如目标物体的颜色跟环境差异比较明显,CamShift算法可能会达到比较好的效果。

5.轨迹分析

        根据目标的运动轨迹计算出目标的运动方向和位移等,判断目标是进入还是离开指定区域,从而对目标进行数目统计。

编程实现

        以下是采用运动目标连续性匹配算法实现的视频人数统计系统截图。开发环境是Opencv2.3.0+VS2005。

        具体算法参考了论文《一种基于人头特征的人数统计方法研究》 作者:顾德军 伍铁军,论文介绍的很详细。这里就不再鳌述了。测试视频文件从优酷(地址:http://v.youku.com/v_show/id_XMTY2MDY1OTk2.html)上找到,从视频文件可以看出拍摄视频摄像头的是斜向下安装,此种方式得到的二值图像的人头特征不是很明显,因而不太好利用人头特征来进行目标识别。这里只是简单利用了运动目标面积大小来做了匹配,当多人之间互相有重叠或包含其它物体时,就不能很好的区分开来。

        一种改进的方法是摄像头采用头顶式的安装,这样经过二值化处理的人头特征应该会比较明显一些,而且人头之间不会有重叠的现象,准确率会更大一些。但由于没有该环境下的视频数据,因次没办法来验证识别率到底如何。如果有对这方面感兴趣的朋友,可以一起来交流学习。



参考文献:

1.《一种基于人头特征的人数统计方法研究》 作者:顾德军 伍铁军

2.《基于视频的客流技术系统的研究》 作者:田京雷 毕胜

3.《智能视频中基于机器学习的自动人数统计》 作者:贾彗星 章毓晋



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍了Debian及其衍生发行版中如何通过/etc/network/interfaces文件进行网络接口的配置,对比了Red Hat系系统的不同之处,并提供了多种常见配置示例及解析。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
author-avatar
笑如夏风_503
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有