资源简介
手势识别程序,基于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个文件信息
相关资源
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 基于CNN的静态手势识别系统
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 利用OpenCV中的Stitcher类实现全景图像拼
- 自己玩的动态手势识别系统
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- 617张国内车牌60-17bmp图片用于OpenCV正样
- hog特征提取,c版本代码
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
川公网安备 51152502000135号
评论
共有 条评论