资源简介
手势识别程序,基于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实现的手势识别,石头剪刀布的
- 人脸识别系统设计-毕业设计
- 相机标定完整工程vs
- 基于opencv的绊线检测代码
- OPENCV人眼检测
-
haarcascades人脸特征分类器xm
l文件 - opencv实现只有xy方向平移的图像拼接算
- Qt+Opencv-PCA人脸识别+视频
- 答题卡识别小程序
- Opencv2.1 的dll和lib文件 win系统的
- HDR_Code_Image.rar for opencv
- opencv毕业设计
- opencv3.4.1+opencv_contrib经vs2015编译后生成
- opencv交叉编译过程中boostdesc_bgm.i等一
- opencv网络摄像头功能和文件传输功能
- opencv410编译好的32位库
- OpenCV文字区域定位
- 利用PCL,OpenCV求取点云的体积
- opencv按像素切割图片并按照类别编号
- 2018电子竞赛手势识别FDC2214
- opencv三角测量一种代码实现
- kinect2.0获取深度图、彩色图,并利用
- 比opencv还牛的,免费、高效的人脸检
- SURF源码(opencv中文注释).rar
- 二值图像的形状特征提取并显示在图
- opencv 轮廓的提取多种方法
-
ob
jectMarker正样本采集 - 基于opencv的图像去噪源代码
- opencv图像校正摄像头校正
- numpy-1.15.0-cp37-none-win32
评论
共有 条评论