資源簡介
手勢識別程序,基于opencv,利用camshift來實現。效果很好,在vs2010和opencv2.4.4上可以完美運行。

代碼片段和文件信息
//對運動物體的跟蹤:
//如果背景固定可用幀差法?然后在計算下連通域?將面積小的去掉即可
//如果背景單一即你要跟蹤的物體顏色和背景色有較大區別?可用基于顏色的跟蹤?如CAMSHIFT?魯棒性都是較好的
//如果背景復雜如背景中有和前景一樣的顏色?就需要用到一些具有預測性的算法?如卡爾曼濾波等?可以和CAMSHIFT結合?
#ifdef?_CH_
#pragma?package?
//這個語句為什么前面帶#
#endif
#ifndef?_EiC
#include?“cv.h“
#include?“highgui.h“
#include?
#include?
#endif
IplImage?*image?=?0?*hsv?=?0?*hue?=?0?*mask?=?0?*backproject?=?0?*histimg?=?0;
//用HSV中的Hue分量進行跟蹤
CvHistogram?*hist?=?0;
//直方圖類
int?backproject_mode?=?0;
int?select_object?=?0;
int?track_object?=?0;
int?show_hist?=?1;
CvPoint?origin;
//typedef?struct?CvPoint
//{
//????int?x;
//????int?y;
//}
//CvPoint;
CvRect?selection;
//typedef?struct?CvRect
//{
//????int?x;
//????int?y;
//????int?width;
//????int?height;
//}
//CvRect;
CvRect?track_window;
CvBox2D?track_box;
//Meanshift跟蹤算法返回的Box類
//typedef?struct?CvBox2D{
//CvPoint2D32f?center;?/*?盒子的中心?*/
//CvSize2D32f?size;?/*?盒子的長和寬?*/
//float?angle;?/*?水平軸與第一個邊的夾角,用弧度表示*/
//}CvBox2D;
CvConnectedComp?track_comp;
//連接部件?
//typedef?struct?CvConnectedComp{
//double?area;?/*?連通域的面積?*/
//float?value;?/*?分割域的灰度縮放值?*/
//CvRect?rect;?/*?分割域的?ROI?*/
//}?CvConnectedComp;
int?hdims?=?16;
//劃分直方圖bins的個數,越多越精確
float?hranges_arr[]?=?{0180};
//像素值的范圍
float*?hranges?=?hranges_arr;
//用于初始化CvHistogram類
int?vmin?=?10?vmax?=?256?smin?=?30;
//用于設置滑動條
void?on_mouse(?int?event?int?x?int?y?int?flags?void*?param?)
//鼠標回調函數該函數用鼠標進行跟蹤目標的選擇
{
????if(?!image?)
????????return;
????//如果圖像原點坐標在左下則將其改為左上
????if(?image->origin?)
????????y?=?image->height?-?y;
????if(?select_object?)
????//select_object為1表示在用鼠標進行目標選擇
????//此時對矩形類selection用當前的鼠標位置進行設置
????{
????????selection.x?=?MIN(xorigin.x);
????????selection.y?=?MIN(yorigin.y);
????????selection.width?=?selection.x?+?CV_IABS(x?-?origin.x);
????????selection.height?=?selection.y?+?CV_IABS(y?-?origin.y);
????????
????????selection.x?=?MAX(?selection.x?0?);
????????selection.y?=?MAX(?selection.y?0?);
????????selection.width?=?MIN(?selection.width?image->width?);
????????selection.height?=?MIN(?selection.height?image->height?);
????????selection.width?-=?selection.x;
????????selection.height?-=?selection.y;
????}
????switch(?event?)
????{
????case?CV_EVENT_LBUTTONDOWN:
???? //鼠標按下開始點擊選擇跟蹤物體
????????origin?=?cvPoint(xy);
????????selection?=?cvRect(xy00);
????????select_object?=?1;
????????break;
????case?CV_EVENT_LBUTTONUP:
???? //鼠標松開完成選擇跟蹤物體
????????select_object?=?0;
????????if(?selection.width?>?0?&&?selection.height?>?0?)
???????? //如果選擇物體有效,則打開跟蹤功能
????????????track_object?=?-1;
????????break;
????}
}
CvScalar?hsv2rgb(?float?hue?)
//用于將Hue量轉換成RGB量
{
????int?rgb[3]?p?sector;
????static?const?int?sector_data[][3]=
????????{{021}?{120}?{102}?{201}?{210}?{012}};
????hue?*=?0.033333333333333333333333333333333f;
????sector?=?cvFloor(hue);
????p?=?cvRound(255*(hue?-?sector));
/*這個表達式可以化為下式:?p=?p^(sector&1???255?:?0)
括
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-11-21?17:08??opencv的camshift程序+注釋\
?????目錄???????????0??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\
?????文件???????20192??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\CL.read.1.tlog
?????文件????????2236??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\CL.write.1.tlog
?????文件?????1227776??2009-08-26?12:03??opencv的camshift程序+注釋\Debug\cam.avi
?????文件??????443904??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\camshiftdemo.exe
?????文件?????????406??2013-09-23?23:28??opencv的camshift程序+注釋\Debug\camshiftdemo.exe.em
?????文件?????????472??2013-11-20?20:50??opencv的camshift程序+注釋\Debug\camshiftdemo.exe.em
?????文件?????????381??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\camshiftdemo.exe.intermediate.manifest
?????文件?????1092736??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\camshiftdemo.ilk
?????文件?????????112??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\camshiftdemo.lastbuildstate
?????文件????????3166??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\camshiftdemo.log
?????文件???????34029??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\camshiftdemo.obj
?????文件?????2165760??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\camshiftdemo.pdb
?????文件?????????220??2013-09-23?23:28??opencv的camshift程序+注釋\Debug\camshiftdemo_manifest.rc
?????文件????????3366??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\cl.command.1.tlog
?????文件???????????2??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件???????????2??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件???????????2??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件???????????2??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件???????????2??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件???????????2??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件???????11886??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件???????28448??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件????????5022??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\li
?????文件????????1944??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\mt.command.1.tlog
?????文件????????2142??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\mt.read.1.tlog
?????文件?????????470??2013-11-21?15:21??opencv的camshift程序+注釋\Debug\mt.write.1.tlog
?????文件????????2878??2013-11-20?20:50??opencv的camshift程序+注釋\Debug\rc.command.1.tlog
?????文件????????1758??2013-11-20?20:50??opencv的camshift程序+注釋\Debug\rc.read.1.tlog
?????文件????????1790??2013-11-20?20:50??opencv的camshift程序+注釋\Debug\rc.write.1.tlog
............此處省略28個文件信息
評論
共有 條評論