资源简介
用opencv2.3.1做的静态手势检测。先滤波去噪-->转换到HSV空间-->根据皮肤在HSV空间的分布做出阈值判断,这里用到了inRange函数,然后进行一下形态学的操作,去除噪声干扰,是手的边界更加清晰平滑-->得到的2值图像后用findContours找出手的轮廓,去除伪轮廓后,再用convexHull函数得到凸包络。
代码片段和文件信息
/************************************************************************/
/*
Description: 手势检测
先滤波去噪
-->转换到HSV空间
-->根据皮肤在HSV空间的分布做出阈值判断,这里用到了inRange函数,
然后进行一下形态学的操作,去除噪声干扰,是手的边界更加清晰平滑
-->得到的2值图像后用findContours找出手的轮廓,去除伪轮廓后,再用convexHull函数得到凸包络
Author: Yang Xian
Email: yang_xian521@163.com
Version: 2011-11-2
History:
*/
/************************************************************************/
#include // for standard I/O
#include // for strings
#include // for controlling float print precision
#include // string to number conversion
#include // Gaussian Blur
#include // Basic OpenCV structures (cv::Mat Scalar)
#include // OpenCV window I/O
using namespace cv;
using namespace std;
int main(int argc char *argv[])
{
const std::string sourceReference = “test3.avi“;
int delay = 1;
char c;
int frameNum = -1; // frame counter
VideoCapture captRefrnc(sourceReference);
if ( !captRefrnc.isOpened())
{
// cout << “Could not open reference “ << sourceReference << endl;
return -1;
}
Size refS = Size( (int) captRefrnc.get(CV_CAP_PROP_frame_WIDTH)
(int) captRefrnc.get(CV_CAP_PROP_frame_HEIGHT) );
bool bHandFlag = false;
const char* WIN_SRC = “Source“;
const char* WIN_RESULT = “Result“;
// Windows
namedWindow(WIN_SRC CV_WINDOW_AUTOSIZE );
namedWindow(WIN_RESULT CV_WINDOW_AUTOSIZE);
Mat frame; // 输入视频帧序列
Mat frameHSV; // hsv空间
Mat mask(frame.rows frame.cols CV_8UC1); // 2值掩膜
Mat dst(frame); // 输出图像
// Mat frameSplit[4];
vector< vector > contours; // 轮廓
vector< vector > filterContours; // 筛选后的轮廓
vector< Vec4i > hierarchy; // 轮廓的结构信息
vector< Point > hull; // 凸包络的点集
while(true) //Show the image captured in the window and repeat
{
captRefrnc >> frame;
if( frame.empty() )
{
cout << “ < < < Game over! > > > “;
break;
}
imshow( WIN_SRC frame);
// Begin
// 中值滤波,去除椒盐噪声
medianBlur(frame frame 5);
// GaussianBlur( frame frameHSV Size(9 9) 2 2 );
// imshow(“blur2“ frameHSV);
// pyrMeanShiftFiltering(frame frameHSV 10 10);
// imshow(WIN_BLUR frameHSV);
// 转换到HSV颜色空间,更容易处理
cvtColor( frame frameHSV CV_BGR2HSV );
// split(frameHSV frameSplit);
// imshow(WIN_H frameSplit[0]);
// imshow(WIN_S frameSplit[1]);
// imshow(WIN_V frameSplit[2]);
Mat dstTemp1(frame.rows frame.cols CV_8UC1);
Mat dstTemp2(frame.rows frame.cols CV_8UC1);
// 对HSV空间进行量化,得到2值图像,亮的部分为手的形状
inRange(frameHSV Scalar(03030) Scalar(40170256) dstTemp1);
inRange(frameHSV Scalar(1563030) Scalar(180170256) dstTemp2);
bitwise_or(dstTemp1 dstTemp2 mask);
// inRange(frameHSV Scalar(03030) Scalar(180170256) dst);
// 形态学操作,去除噪声,并使手的边界更加清晰
Mat element = getStructuringElement(MORPH_RE
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 53566 2011-08-12 21:25 handDiscreteTest\Debug\hand.jpg
文件 115200 2011-11-02 14:15 handDiscreteTest\Debug\handDiscreteTest.exe
文件 682620 2011-11-02 14:15 handDiscreteTest\Debug\handDiscreteTest.ilk
文件 1182720 2011-11-02 14:15 handDiscreteTest\Debug\handDiscreteTest.pdb
文件 6262 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\Debug\BuildLog.htm
文件 494515 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\Debug\discrete.obj
文件 621 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\Debug\handDiscreteTest.exe.intermediate.manifest
文件 67 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\Debug\mt.dep
文件 347136 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\Debug\vc90.idb
文件 552960 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\Debug\vc90.pdb
文件 4476 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\discrete.cpp
文件 3758 2011-10-28 15:00 handDiscreteTest\handDiscreteTest\handDiscreteTest.vcproj
文件 1423 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\handDiscreteTest.vcproj.HP98402794308.Administrator.user
文件 24869 2011-10-28 09:46 handDiscreteTest\handDiscreteTest\控制台版本main.cpp
文件 14339072 2011-11-02 14:15 handDiscreteTest\handDiscreteTest.ncb
文件 914 2011-10-27 14:41 handDiscreteTest\handDiscreteTest.sln
..A..H. 17408 2011-11-02 14:15 handDiscreteTest\handDiscreteTest.suo
目录 0 2011-11-02 14:15 handDiscreteTest\handDiscreteTest\Debug
目录 0 2011-11-02 14:15 handDiscreteTest\Debug
目录 0 2011-11-02 14:15 handDiscreteTest\handDiscreteTest
目录 0 2011-10-27 16:40 handDiscreteTest
----------- --------- ---------- ----- ----
17827587 21
相关资源
- opencv 红绿灯识别 运动物体识别
- freeglut,包括.dll、.h和.lib文件,完美
- Opencv摄像头校正
- OpenCV识别出两张图片的人脸,并比较
- 基于QtOpenCV实现GraphCuts算法
- 基于颜色识别的火焰检测算法的open
- opencv红绿灯识别样本北京市的红绿灯
- 基于OpenCV的火灾视频识别方法研究
- opencv人脸检测训练用到的正样本图像
- opencv haartraining 合并.vec文件的工具
- OpenCV3入门pdf
- 基于OpenCV的红点识别
- slam 开源代码ptam and ptamm
- opencv3.4.3 mingw32编译
- 圆形公章的定位检测
-
haarcascade_mcs等所有识别xm
l文件 - 利用OpenCV在VS2015平台下对进行人脸识
- hand-gesture-recognition-opencv-master.zip
- imageStitching实现图像拼接
- 圆点摄像头激光测距源代码---本人亲
- opencv图像分类样本
- 32位 opencv 3.4.1 lib和dll文件
- 基于OpenCV的红绿灯识别
- opencv手写英文字符识别
- OpenCV测试工程
- 基于Opencv3.0生成的dll
- arm版opencv-2.4.9
- opencv3 图片外接矩形框
- OPENCV 合成两张焦点不同,图像相同的
- OPENCV 找出图片焦点
评论
共有 条评论