资源简介
用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的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- 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多相机触发开
- 基于Opencv实现的图像纠偏
- ImageWatch2019.vsix
评论
共有 条评论