资源简介
WINDOWS上用VS2013实现基于码书的运动目标检测,检测了在会议厅中的运动目标,实现了目标跟踪和绘制目标轮廓的功能。最后还有演示的ppt
代码片段和文件信息
#include
#include
#include
#define CHANNELS 3
// 设置处理的图像通道数要求小于等于图像本身的通道数
///////////////////////////////////////////////////////////////////////////
// 下面为码本(codeook)码元(ce)的数据结构
// 处理图像时每个像素对应一个码本每个码本中可有若干个码元
typedef struct ce {
uchar learnHigh[CHANNELS];
// 此码元各通道的阀值上限(学习界限)
uchar learnLow[CHANNELS];
// 此码元各通道的阀值下限
// 学习过程中如果一个新像素各通道值x[i]均有 learnLow[i]<=x[i]<=learnHigh[i]则该像素可合并于此码元
uchar max[CHANNELS];
// 属于此码元的像素中各通道的最大值
uchar min[CHANNELS];
// 属于此码元的像素中各通道的最小值
int t_last_update;
// 此码元最后一次更新的时间每一帧为一个单位时间用于计算stale
int stale;
// 此码元最长不更新时间用于删除规定时间不更新的码元精简码本
} code_element; // 码元的数据结构
typedef struct code_book {
code_element **cb;
// 码元的二维指针理解为指向码元指针数组的指针使得添加码元时不需要来回复制码元只需要简单的指针赋值即可
int numEntries;
// 此码本中码元的数目
int t;
// 此码本现在的时间一帧为一个时间单位
} codeBook; // 码本的数据结构
///////////////////////////////////////////////////////////////////////////////////
// int updateCodeBook(uchar *p codeBook &c unsigned cbBounds int numChannel)
// 使用新的数据点更新codebook条目
//
// p 指向一个YUV像素的指针
// c 此像素的码本
// cbBounds 代码本的学习边界 (查阅资料得到的最佳值: 10)
// numChannel 正在学习的颜色通道的数量
//
//
// 返回
// 码本索引
int cvupdateCodeBook(uchar *p codeBook &c unsigned *cbBounds int numChannel)
{
if (c.numEntries == 0) c.t = 0;
// 码本中码元为零时初始化时间为0
c.t += 1; // 记录学习事件
// 每调用一次加一即每一帧图像加一
//设置像素阀值上下限
int n;
unsigned int high[3] low[3];
for (n = 0; n < numChannel; n++)
{
high[n] = *(p + n) + *(cbBounds + n);
// *(p+n) 和 p[n] 结果等价经查阅*(p+n) 速度更快
if (high[n] > 255) high[n] = 255;
low[n] = *(p + n) - *(cbBounds + n);
if (low[n] < 0) low[n] = 0;
// 用p 所指像素通道数据加减cbBonds中数值作为此像素阀值的上下限
}
//测试p像素是否适合现有的码元阀值
int matchChannel;
int i;
for (i = 0; i < c.numEntries; i++)
{
// 遍历此码书每个码元测试p像素是否满足其中之一
matchChannel = 0;
for (n = 0; n < numChannel; n++)
//遍历每个通道
{
if ((c.cb[i]->learnLow[n] <= *(p + n)) && (*(p + n) <= c.cb[i]->learnHigh[n]))
// 如果p 像素通道数据在该码元阀值上下限之间
{
matchChannel++;
}
}
if (matchChannel == numChannel)
// 如果p 像素各通道都满足上面条件
{
c.cb[i]->t_last_update = c.t;
// 更新该码元时间为当前时间
for (n = 0; n < numChannel; n++)
//调整该码元各通道最大最小阀值
{
if (c.cb[i]->max[n] < *(p + n))
c.cb[i]->max[n] = *(p + n);
else if (c.cb[i]->min[n] > *(p + n))
c.cb[i]->min[n] = *(p + n);
}
break;
}
}
// p 像素不满足此码本中任何一个码元下面创建一个新码元
if (i == c.numEntries)
{
code_element **foo = new code_element*[c.numEntries + 1];
// 申请c.numEntries+1 个指向码元的指针
for (int ii = 0; ii < c.numEntries; ii++)
// 将前c.numEntries 个指针指向已存在的每个码元
foo[ii] = c.cb[ii];
foo[c.numEntries] = new code_element;
// 申请一个新的码元
if (c.numEntries) delete[] c.cb;
// 删除c.cb 指针数组
c.cb = foo;
// 把foo 头指针赋给c.cb
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-04-17 09:20 codebook\
目录 0 2018-12-20 10:46 codebook\codebook\
目录 0 2018-12-20 10:45 codebook\codebook\.vs\
目录 0 2018-12-20 10:45 codebook\codebook\.vs\codebook\
目录 0 2018-12-20 10:45 codebook\codebook\.vs\codebook\v15\
文件 32768 2018-12-20 10:45 codebook\codebook\.vs\codebook\v15\.suo
文件 22208512 2018-12-20 10:45 codebook\codebook\.vs\codebook\v15\Browse.VC.db
目录 0 2018-12-20 10:45 codebook\codebook\codebook\
文件 6252544 2009-04-30 22:51 codebook\codebook\codebook\Raw.avi
文件 14554 2018-12-12 14:43 codebook\codebook\codebook\codebook.cpp
文件 8411 2018-12-06 00:11 codebook\codebook\codebook\codebook.vcxproj
文件 1156 2018-12-06 00:08 codebook\codebook\codebook\codebook.vcxproj.filters
文件 165 2018-12-06 00:08 codebook\codebook\codebook\codebook.vcxproj.user
文件 200 2018-12-06 00:08 codebook\codebook\codebook\pch.cpp
文件 639 2018-12-06 00:08 codebook\codebook\codebook\pch.h
目录 0 2018-12-20 10:45 codebook\codebook\codebook\x64\
目录 0 2018-12-20 10:46 codebook\codebook\codebook\x64\Debug\
文件 273 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.log
文件 433721 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.obj
文件 2031616 2018-12-06 00:11 codebook\codebook\codebook\x64\Debug\codebook.pch
目录 0 2018-12-20 10:46 codebook\codebook\codebook\x64\Debug\codebook.tlog\
文件 1492 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.tlog\CL.command.1.tlog
文件 43084 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.tlog\CL.read.1.tlog
文件 1110 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.tlog\CL.write.1.tlog
文件 208 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.tlog\codebook.lastbuildstate
文件 1234 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.tlog\li
文件 2238 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.tlog\li
文件 598 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\codebook.tlog\li
文件 3898 2018-12-06 00:11 codebook\codebook\codebook\x64\Debug\pch.obj
文件 388096 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\vc141.idb
文件 1921024 2018-12-12 14:43 codebook\codebook\codebook\x64\Debug\vc141.pdb
............此处省略8个文件信息
- 上一篇:PE下注入 USB3.0驱动
- 下一篇:视频网站项目的源码
相关资源
- 用于运动目标检测的视频。
- 基于canny算子和光流法的运动目标检测
- 基于背景差法的运动目标检测
- 可用于视频运动目标检测的视频
- 提取视频前景背景/运动目标检测
- 基于背景累积的运动目标检测
- 论文研究-改进的Vibe运动目标检测算法
- 输入多幅图像实现帧间差分实现运动
- 背景差分与三帧差分结合的运动目标
- 基 于OpenCV 的动态背景下的运动目标检
- 基于视频的运动目标检测与识别
- 基于背景差分的运动目标检测方法
- 运动目标波门跟踪
- 基于OPENCV的背景差法提取运动目标
- 自己写的运动目标检测算法汇总
- 码书运动检测算法
- 一种运动目标检测与跟踪快速算法的
- 基于vibe背景建模的目标检测算法
- LBG算法码书设计
- 背景差分人体检测
- 基于视频的运动目标检测
- DM642上实现运动目标检测与跟踪
- 混合高斯模型及背景差分实现检测
- 运动目标检测源代码opencv
- 基于混合高斯背景模型的背景差检测
- 一种基于GLCM的运动目标检测新方法
- 背景差分,更新,运动物体检测源码
评论
共有 条评论