C++基于OpenCV实现实时监控和运动检测记录

本文档介绍了一门课程,该课程基于OpenCV实现实时监控,并通过运动检测记录视频。课程涵盖背景处理、运动检测和视频录制,适用于OpenCV 3.1.0及2.4.13版本。实验环境涉及OpenCV的安装和配置,实验原理包括使用OpenCV API捕获摄像头数据、处理监控帧和进行运动检测。实验步骤详述了代码编写、头文件定义、函数设计和实验步骤,包括如何检测和记录运动视频。
摘要由CSDN通过智能技术生成
               

基于OpenCV实现实时监控并通过运动检测记录视频

一、课程介绍

1. 课程来源

课程使用的操作系统为 Ubuntu 14.04,OpenCV 版本为OpenCV 2.4.13.1,你可以在这里查看该版本 OpenCV 的文档。官方文档中有两个例子可以帮助你理解此课程,分别是

你可以在我的 Github仓库 上找到 Windows 系统对应的 Visual Studio 工程。全部代码文件也可以在我的仓库中找到。

这里提供了完整的代码 http://labfile.oss.aliyuncs.com/courses/671/monitor-recorder.zip 。

2. 内容简介

  • 课程实验使用PC机自带的摄像头作为监视器进行实时监控。
  • 对原始图像做一定处理,使监控人员或监控软件更易发现监控中存在的问题。
  • 当摄像头捕捉到运动产生时自动记录视频。

3. 课程知识点

本课程项目完成过程中将学习:

  • 对摄像头数据的捕获
  • 对捕获到的监控帧作背景处理
  • 对监控视频做运动检测并记录视频

二、实验环境

  • 本实验需要先在实验平台安装 OpenCV ,需下载依赖的库、源代码并编译安装。安装过程建议按照教程给出的步骤,或者你可以参考官方文档中 Linux 环境下的安装步骤,但 有些选项需要变更。安装过程所需时间会比较长,这期间你可以先阅读接下来的教程,在大致了解代码原理后再亲自编写尝试。

  • 我提供了一个编译好的2.4.13-binary.tar.gz包,你可以通过下面的命令下载并安装,节省了编译的时间,通过这个包安装大概需要20~30分钟,视实验楼当前环境运转速度而定。

    $ sudo apt-get update$ sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev$ cd ~$ mkdir OpenCV && cd OpenCV$ wget http://labfile.oss.aliyuncs.com/courses/671/2.4.13-binary.tar.gz$ tar -zxvf 2.4.13-binary.tar.gz$ cd opencv-2.4.13$ cd build$ sudo make install
  • 如果你想体验编译的整个过程,我也提供了一个一键安装的脚本文件,你可以通过下面的命令尝试。这个过程会非常漫长,约2小时,期间可能还需要你做一定的交互确认工作。

    $ cd ~$ sudo apt-get update$ wget http://labfile.oss.aliyuncs.com/courses/671/opencv.sh$ sudo chmod 777 opencv.sh$ ./opencv.sh
  • 如果你觉得有必要亲自尝试一下安装的每一步,可以按照下面的命令逐条输入执行,在实验楼的环境中大概需要两个小时。

    $ sudo apt-get update$ sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev$ wget https://github.com/Itseez/opencv/archive/2.4.13.zip$ unzip 2.4.13.zip$ cd 2.4.13$ mkdir release && cd release$ cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON ..$ sudo make$ sudo make install$ sudo gedit /etc/ld.so.conf.d/opencv.conf   $ 输入 /usr/local/lib,按 Ctrl + X 退出,退出时询问是否保存,按 Y 确认。$ sudo ldconfig -v$ sudo gedit /etc/bash.bashrc$ 在文件末尾加入$ PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfigexport PKG_CONFIG_PATH按 Ctrl + X 退出,按 Y 确认保存。
  • 检验配置是否成功。将 OpenCV 自带的例子(在目录PATH_TO_OPENCV/samples/C下)运行检测。如果成功,将显示 lena 的脸部照片,同时圈出其面部。

    $ cd samples/C$ ./build_all.sh$ ./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg

三、实验原理

实验通过 OpenCV 提供的 API 完成大部分任务,首先捕获摄像头数据,之后对捕获到的每一帧作背景减除处理,得出易于识别的图像,最后利用直方图做实时图像和背景图像的对比,实现运动检测并写入视频文件。

四、实验步骤

通过以下命令可下载项目源码,作为参照对比完成下面详细步骤的学习。

wget http://labfile.oss.aliyuncs.com/courses/671/monitor-recorder.zipunzip monitor-recorder.zip

1.定义头文件

工程文件由一个头文件 monitor.hpp 和一个入口文件 main.cpp 构成。首先在头文件中定义将使用的库和相关变量。

代码中使用到的 OpenCV 头文件和 C++ 头文件在头文件 monitor.hpp 中声明如下,其中 unistd.h 包含了 Linux 下的 sleep 函数,参数为睡眠的秒数。

#ifndef __MONITOR_H_#define __MONITOR_H_//opencv#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/video/background_segm.hpp>#include <opencv2/objdetect/objdetect.hpp>#include <opencv2/imgproc/imgproc.hpp>//C++#include <ctime>#include <iostream>#include <string>#include <cstdio>#include <unistd.h> #include <sstream>using namespace cv;using namespace std;// ...#endif __MONITOR_H_

2.设计 processCamera 函数

processCamera 负责完成主

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值