资源简介

手势识别程序,基于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.embed.manifest
     文件         472  2013-11-20 20:50  opencv的camshift程序+注释\Debug\camshiftdemo.exe.embed.manifest.res
     文件         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\link-cvtres.read.1.tlog
     文件           2  2013-11-21 15:21  opencv的camshift程序+注释\Debug\link-cvtres.write.1.tlog
     文件           2  2013-11-21 15:21  opencv的camshift程序+注释\Debug\link.5924-cvtres.read.1.tlog
     文件           2  2013-11-21 15:21  opencv的camshift程序+注释\Debug\link.5924-cvtres.write.1.tlog
     文件           2  2013-11-21 15:21  opencv的camshift程序+注释\Debug\link.5924.read.1.tlog
     文件           2  2013-11-21 15:21  opencv的camshift程序+注释\Debug\link.5924.write.1.tlog
     文件       11886  2013-11-21 15:21  opencv的camshift程序+注释\Debug\link.command.1.tlog
     文件       28448  2013-11-21 15:21  opencv的camshift程序+注释\Debug\link.read.1.tlog
     文件        5022  2013-11-21 15:21  opencv的camshift程序+注释\Debug\link.write.1.tlog
     文件        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个文件信息

评论

共有 条评论