資源簡介
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? {
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? {
//?遍歷此碼書每個碼元測試p像素是否滿足其中之一
matchChannel?=?0;
for?(n?=?0;?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? //調整該碼元各通道最大最小閥值
{
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?個指針指向已存在的每個碼元
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驅動
- 下一篇:視頻網站項目的源碼
評論
共有 條評論