资源简介
本源码实现了基于摄像头检测手掌和拳头的功能。
1. 源码项目是基于VC2010,需要自行配置好OpenCV2.0以上版本环境。
2. 本源码使用了两个训练文件 palm2.xml和fist2.xml, 运行前应将此两个文件复制到D盘根目录。

代码片段和文件信息
//============================================================================
// Name : opencv_handdetect.cpp
// Author : andol li andol@andol.info
// Version : 0.1
// Copyright : 2012
// Description : using haartraining results to detect the hand gesture of FIST in video stream.
//
//============================================================================
#include “opencv/cv.h“
#include “opencv2/core/core.hpp“
#include “opencv2/contrib/contrib.hpp“
#include “opencv2/highgui/highgui.hpp“
#include
#include
#include
using namespace cv;
using namespace std;
const double scale = 1.1;
CvMemStorage* storage = 0;
CvHaarClassifierCascade* cascadeFist = 0;
CvHaarClassifierCascade* cascadePalm = 0;
void Detect_Fist_Palm(IplImage *input_image);
void Detect_Fist(IplImage *input_image);
void fingerTip(IplImage *img);
const char* cascade_nameFist = “d:/fist2.xml“;
const char* cascade_namePalm = “d:/palm2.xml“;
CvRect prevRect;
vector queueRectDetected;
int main()
{
//1.0 api version
CvCapture *capture =0;
IplImage *frame *frame_copy=0 *frame_copy2= 0;
cascadeFist = (CvHaarClassifierCascade*)cvLoad( cascade_nameFist 0 0 0 );
cascadePalm = (CvHaarClassifierCascade*)cvLoad( cascade_namePalm 0 0 0 );
if( !cascadeFist || !cascade_namePalm ){
fprintf( stderr “ERROR: Could not load classifier cascade\n“ );
return -1;
}
storage = cvCreateMemStorage(0);
capture = cvCaptureFromCAM(0);
cvNamedWindow(“result“ 1);
prevRect.width =0;prevRect.height = 0;
prevRect.x =0;prevRect.y = 0;
if(capture){
for(;;){
if(!cvGrabframe(capture)) break;
frame = cvRetrieveframe( capture);
if(!frame) break;
if(!frame_copy)
frame_copy = cvCreateImage(cvSize(frame->width frame->height) IPL_DEPTH_8U frame->nChannels);
if(frame->origin == IPL_ORIGIN_TL){
cvCopy(frame frame_copy 0);
cvFlip(frame frame_copy 1);
}else{
cvFlip(frame frame_copy 0);
}
//开始检测拳头和手掌
Detect_Fist_Palm(frame_copy);
//检测指尖
//fingerTip(frame_copy);
if(cvWaitKey(10) >= 0)
break;
}
cvReleaseImage( &frame_copy );
cvReleaseCapture( &capture );
}
return 0;
}
void Detect_Fist_Palm(IplImage *img)
{
double scale = 1.1;
CvPoint pt1 pt2;
CvRect maxRectPalm;
maxRectPalm.x = 0;
maxRectPalm.y = 0;
maxRectPalm.width = 0;
maxRectPalm.height = 0;
cvClearMemStorage( storage );
CvSeq* palms = cvHaarDetectobjects(
img
cascadePalm
storage
scale 3 CV_HAAR_DO_CANNY_PRUNING
cvSize(40 40) );
maxRectPalm.height = 0;
maxRectPalm.width = 0;
for( int i = 0; i < (palms ? palms->total : 0); i++ )
{
CvRect* rpalm = (CvRect*)cvGetSeqElem( palms i );
if (rpalm->height > maxRectPalm.height ) maxRectPalm = *rpalm;
}
if ( maxRectPalm.width==0 ){
Detect_Fist(img);
}else{
/*pt1.x = maxRectPa
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-06-30 20:22 OpenCV - HandGesture\
文件 69355 2012-08-20 21:10 OpenCV - HandGesture\fist2.xm
文件 15872 2013-06-30 20:15 OpenCV - HandGesture\HelloOpenCV.suo
文件 7184 2013-06-26 12:12 OpenCV - HandGesture\main.cpp
文件 52186 2012-08-20 21:10 OpenCV - HandGesture\palm2.xm
文件 199 2013-06-30 20:20 OpenCV - HandGesture\使用说明.txt
- 上一篇:电路(系统)的线性指标详解
- 下一篇:ov9655设置代码
相关资源
- 基于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多相机触发开
评论
共有 条评论