资源简介
OpenCV2.4.9的基于背景差分法的视频目标运动侦测的代码,相应位置有具体的注释,具体分析见博客http://blog.csdn.net/primetong/article/details/79609993
代码片段和文件信息
//解决VS2013中fopen替代为fopen_s的问题
//最普通的解决方法,就是使用fopen_s替代,这是fopen_s()函数的用法
//fopen_s(_Outptr_result_maybenull_ FILE ** _File _In_z_ const char * _Filename _In_z_ const char * _Mode);
//这是fopen()函数:
//fopen(_In_z_ const char * _Filename _In_z_ const char * _Mode);
//但fopen_s参数要比fopen多一个,并且返回的类型为:errno_t __cdecl,但fopen()返回的类型为:FILE * __cdecl
//因此,fopen_s函数可能并不适合自己的程序,解决方法有一比较好的方法:
//更改预处理定义:
//项目->属性->配置属性->C / C++->预处理器->预处理器定义,增加_CRT_SECURE_NO_DEPRECATE
//这样就可以解决vs2013报错的问题了。
//1、关于运动目标检测的方法总结
//查阅了相关的文献,目前能够实现运动物体检测的方法主要有以下几种:
//1)背景差分法:能完整快速地分割出运动图像。其不足之处是易受光线变化影响,背景的更新是关键。不适用于摄像头运动的情况;
//2)光流法:能检测独立运动的图像,可用于摄像头运动的情况,但是计算复杂耗时,较难实现实时监测;
//3)帧差法:受光线变化影响较小,简单快速,但不能分割出完整的运动对象,需进一步运用目标分割算法。
// 还有一些改进的算法,主要致力于减少光照影响和检测慢速物体变化。以上是大多数文献中对这三种方法的评价,
// 由于是初次接触,而且项目的需求是静止相机,因此采用最简单的方法:背景差分法。
//2、背景差分法实现步骤
//可将背景差分法的实现步骤总结如下:
//1)进行图像的预处理:主要包括对图像进行灰度化以及滤波。
// 灰度化的方法及其C语言实现可参考《Canny边缘检测算法原理及其VC实现详解(二)》一文;
// 关于图像滤波,通常可采用的方法有中值滤波、均值滤波以及高斯滤波等。
// 关于高斯滤波的实现详见《高斯图像滤波原理及其编程离散化实现方法》一文。
//2)背景建模:这是背景差法较为重要的第一步。
// 目前大多的思路都是根据前N帧图像的灰度值进行区间统计从而得到一个具有统计意义的初始背景。
// 在第一次的实现过程中,采用第一幅图片作为背景图,这样比较简单。
//3)前景提取:将当前最新的图像与背景做差,即可求得背景差图,然后根据一定的方法对改图进行二值化,
// 最终获得运动前景区域,即实现图像分割。
//所研究的运动检测和背景更新方法实现的步骤如下:
//(1)开辟静态内存,对图像进行初始化准备采集;
//(2)采集图像,定义参数k,作为图像序列计数。采集第1幅图像时,则根据第一帧的大小信息进行矩阵、图像的初始化,
//并且将第一帧图像进行灰度化处理,并转化为矩阵,作为背景图像及矩阵;如果k不等于1则把当前帧进行灰度化处理,
//并转化为矩阵,作为当前帧的图像及矩阵。用当前帧的图像矩阵和背景帧的图像矩阵做差算出前景图矩阵并对其进行
//二值化以便计算它与背景帧差别较大的像素个数,也就是二值化后零的个数。
//当第一帧的异物大于1W个像数点则需要将当前帧存储为第一帧,并且将系统的状态转为1——采集第二帧;
//第一帧和第二帧的异物都大于1W个像数点时,将当前帧存储为第二帧,通过判断第一帧和第二帧的差值来确定两帧是否连续,
//若连续则将系统状态转为2——采集第三帧,若不连续则报警,并把系统状态转为0——采集背景帧;
//当第一帧和第二帧的异物都大于1W个像数点 而第三帧没有时则报警;
//若连续3帧的异物都大于1W个像数点时,将当前帧存储为第三帧,通过判断第二帧和第三帧的差值来确定两帧是否连续,
//若连续则将更新背景,若不连续则报警。然后把系统状态转为0——采集背景帧。
//注意其中有一个0-1-2-0....的状态机。
//cvCopy的原型是:
//void cvCopy(const CvArr* src CvArr* dst const CvArr* mask = NULL);
//在使用这个函数之前,你必须用cvCreateImage()一类的函数先开一段内存,然后传递给dst。cvCopy会把src中的数据复制到dst的内存中。
//
//cvCloneImage的原型是:
//IplImage* cvCloneImage(const IplImage* image);
//在使用函数之前,不用开辟内存。该函数会自己开一段内存,然后复制好image里面的数据,然后把这段内存中的数据返回给你。
//clone是把所有的都复制过来,也就是说不论你是否设置Roi Coi等影响copy的参数,clone都会原封不动的克隆过来。
//copy就不一样,只会复制ROI区域等。
#include
#include
#include
#include
#include
////调用以下函数可以对运动目标寻找轮廓并绘制矩形框,但是效果不佳暂且就不找问题所在了
//CvMemStorage *stor;
//CvSeq *cont;
//void DrawRec(IplImage* pImgframe IplImage* pImgProcessed int MaxArea);
//main(int argc char *argv[])中的两个参数 argc表示参数个数,*argv则是具体的参数.
//默认情况下,project本身是作为第一个参数的(比如,我的应用输出是test.exe,则argv[0]对应的值为test.exe的绝对路径
//- D:\program files\vs2012\vctest\debug\test.exe),即默认情况下argc的值为1(该值无需手动改变)
//如果需设定其他参数,可以通过如下配置:
//<1>选择PROJECT—>Properties—>Configuration Properties—>Debugging—>Command Arguments
//<2>在Command Arguments中添加参数,假设 : 要设定argv[1] = ”23” argv[2] = ”Hello”
//那么输入值23 Hello即可(两个值之间空格隔开要传空格就包括在“ “中)然后保存即可。运行之后可发现参数值已经改变
//中文版:菜单[项目]->属性页->配置属性->调试,在[命令行参数]里填上即可。不同参数之前用空格隔开。
int main( int arg
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 66560 2018-03-19 15:06 VideoDetection\Debug\VideoDetection.exe
文件 588308 2018-03-19 15:06 VideoDetection\Debug\VideoDetection.ilk
文件 1928192 2018-03-19 15:06 VideoDetection\Debug\VideoDetection.pdb
文件 209885 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\main.obj
文件 650240 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\vc120.idb
文件 1249280 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\vc120.pdb
文件 1884 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\VideoDetection.log
文件 744 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\VideoDetection.tlog\cl.command.1.tlog
文件 17906 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\VideoDetection.tlog\CL.read.1.tlog
文件 556 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\VideoDetection.tlog\CL.write.1.tlog
文件 2064 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\VideoDetection.tlog\li
文件 4956 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\VideoDetection.tlog\li
文件 534 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\VideoDetection.tlog\li
文件 172 2018-03-19 15:06 VideoDetection\VideoDetection\Debug\VideoDetection.tlog\VideoDetection.lastbuildstate
文件 12636 2017-12-25 19:41 VideoDetection\VideoDetection\main.cpp
文件 2498886 2017-12-24 23:31 VideoDetection\VideoDetection\traffic.flv
文件 4116 2017-12-25 11:58 VideoDetection\VideoDetection\VideoDetection.vcxproj
文件 945 2017-12-25 11:53 VideoDetection\VideoDetection\VideoDetection.vcxproj.filters
文件 380 2018-03-19 15:14 VideoDetection\VideoDetection\VideoDetection.vcxproj.user
文件 15335424 2018-03-19 15:52 VideoDetection\VideoDetection.sdf
文件 988 2017-12-25 11:51 VideoDetection\VideoDetection.sln
..A..H. 24576 2018-03-19 15:52 VideoDetection\VideoDetection.v12.suo
目录 0 2018-03-19 15:14 VideoDetection\VideoDetection\Debug\VideoDetection.tlog
目录 0 2018-03-19 15:14 VideoDetection\VideoDetection\Debug
目录 0 2018-03-19 15:14 VideoDetection\Debug
目录 0 2018-03-19 15:14 VideoDetection\VideoDetection
目录 0 2018-03-19 15:52 VideoDetection
----------- --------- ---------- ----- ----
22599232 27
............此处省略0个文件信息
- 上一篇:基于qt实现的贪吃蛇游戏
- 下一篇:计算机组成原理实验报告__存储器实验
相关资源
- 基于OpenCV的疲劳驾驶检测系统的设计
- OpenCV三维重构代码
- 双目测距-opencv
- opencv人脸/人眼/人体识别分类器
- eigen3(cmake VS生成)
- pcl 1.7.2(vtk6.2)+vs2013_x64 +test.pcd点云
- opencv4.0结合TensorFlow实现mask rcnn的目标
- opencv+qt通过CGI读取网络摄像头工程
- 安装opencv342缺失的boostdesc_bgm.i系列文
- OpenCV2.4.4实现HOG行人检测
- opencv的运动跟踪
- sift算法VC实现需要OPENCV
- opencv标定单目相机
- opencv 数字识别
- itti视觉显著性计算模型opencv实现
- 异常行为检测
- qt+opencv视频图像采集与基于tcp协议的
- opencv2.4.3和4.0函数手册带目录可搜索
- 遗留物检测
- 笔记本OpenCV调用摄像头进行人脸捕捉
- VS+OPENCV手势识别
- opencv下haarclassifiercascade加上LBPHFaceRe
- 图片动漫风格化
- 基于SVM与ANN的车牌识别
- OpenCV实现同一窗口显示多幅图片
- haar特征的手势检测OpenCV
- 基于opencv的人脸表情识别的预处理
- opencv+qt+vs的摄像头视频显示和处理G
- OpenCV算法精解——源码和测试图片
- opencv结构光生成代码
评论
共有 条评论