资源简介
一般做手形识别,会先做肤色分割,因为人的皮肤颜色(黄种人哈),在HSV颜色空间下,和背景相比有明显的差别,所以利用肤色可以很好的提取手的区域。
在此 我使用形状匹配(matchShapes)来做,手形的对比,识别出手形代表的数字意义。当然这种方法非常依赖于模板的丰富性,有很大的局限性。
代码片段和文件信息
/*
* 摄像头读取-->
* HSV颜色空间转换及通道分离-->
* 肤色分割-->
* 中值滤波-->
* 轮廓检测及过滤-->
* 轮廓形状匹配
*
*/
#include
#include
#include
using namespace cv;
using namespace std;
#define MAXVALUE (80)
#define KERNEL_SIZE (7)
int minVal = 7 maxVal = 20;
int is_using_canny = 0;
int canny_threshold = 3;
Mat frame; //原始图像帧
vector channels; //HSV通道分离
Mat frameH; //H通道
Mat result; //最终结果
Mat resultRGB; //将结果显示在原图
int match_number = -1;
//模板总数
#define TEMPLATE_NUMS (10)
vector< vector > mContoursTemp; //轮廓模板集
vector< vector > mContoursProc; //待处理轮廓集
//分割H通道时的最小值
void trackBarMin(int pos void* userdata)
{}
//分割H通道时的最大值
void trackBarMax(int pos void* userdata)
{}
//是否使用Canny边缘检测
void isUsingCanny(int pos void* userdata)
{}
//分割H通道时的最大值
void cannyThreshold(int pos void* userdata)
{}
//载入模板的轮廓
void init_hand_template(void);
// 对肤色分割、滤波去噪、开运算后图像进行轮廓提取并过滤
void hand_contours(Mat &srcImage);
// 将目标轮廓与模板轮廓进行匹配
void hand_template_match(void);
// 在图片的左上角标注数字
void number_draw(Mat &img int num);
// 将Mat中的每个元素设置为某个数值
void setMatInt(Mat & input_image uchar val);
int main()
{
// 载入模板的轮廓
init_hand_template();
#if 1
namedWindow(“original“);
namedWindow(“TrackBar“);
namedWindow(“result“);
createTrackbar(“minVal“ “TrackBar“ &minVal MAXVALUE trackBarMin);
createTrackbar(“maxVal“ “TrackBar“ &maxVal MAXVALUE trackBarMax);
createTrackbar(“is_using_canny“ “TrackBar“ &is_using_canny 1 isUsingCanny);
createTrackbar(“canny_threshold“ “TrackBar“ &canny_threshold 120 cannyThreshold);
// 打开摄像头
VideoCapture capture(0);
if(false == capture.isOpened())
{
cout << “camera open failed!“ << endl;
return -1;
}
Mat kernel = getStructuringElement(MORPH_RECT Size(KERNEL_SIZE KERNEL_SIZE));
while(true)
{
// 获取图片帧
capture >> frame;
if(true == frame.empty())
{
cout << “get no frame“ << endl;
break;
}
// 显示原始图片
imshow(“original“ frame);
resultRGB = frame.clone();
// 转换HSV颜色通道
cvtColor(frame frame CV_BGR2HSV);
// HSV通道分离
split(frame channels);
frameH = channels[0];
// 显示H通道图片
// imshow(“H-channels“ frameH);
// 肤色分离-使用OpenCV自带函数
inRange(frameH Scalar(minVal) Scalar(maxVal) result);
//------------------------------滤波平滑-----------------------------
// 中值滤波: 可以很好的去除椒盐噪声,而且ksize越大效果越好。
medianBlur(result result 11);
//----------------------------形态学运算-----------------------------
/*
* 腐蚀 MORPH_ERODE
* 膨胀 MORPH_DILATE
* 开运算 MORPH_OPEN
* 闭运算 MORPH_CLOSE
* 形态学梯度 MORPH_GRADIENT
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5950 2010-04-06 14:48 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\1.bmp
文件 2822 2010-04-06 20:25 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\10.bmp
文件 5326 2010-04-06 14:46 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\2.bmp
文件 4990 2010-04-06 14:49 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\3.bmp
文件 6758 2010-04-06 20:19 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\4.bmp
文件 5886 2010-04-06 14:51 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\5.bmp
文件 4574 2010-04-06 20:21 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\6.bmp
文件 4878 2010-04-06 20:23 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\7.bmp
文件 6878 2010-04-06 18:36 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\8.bmp
文件 3002 2010-04-06 20:24 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\9.bmp
文件 310114 2017-03-21 16:23 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\HSV_matchShapes.exe
文件 339928 2017-03-21 16:23 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\main.o
文件 18090 2017-03-21 16:15 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\Makefile
文件 14115 2017-03-21 16:15 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\Makefile.Debug
文件 14146 2017-03-21 16:15 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\Makefile.Release
文件 2942 2017-02-17 11:39 HSV_matchShapes\HSV_matchShapes\common.pri
文件 190 2017-03-09 10:22 HSV_matchShapes\HSV_matchShapes\HSV_matchShapes.pro
文件 18337 2017-03-21 16:58 HSV_matchShapes\HSV_matchShapes\HSV_matchShapes.pro.user
文件 9914 2017-03-21 16:23 HSV_matchShapes\HSV_matchShapes\main.cpp
目录 0 2017-03-21 16:23 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug
目录 0 2017-03-09 10:20 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug\release
目录 0 2017-03-09 10:22 HSV_matchShapes\build-HSV_matchShapes-Desktop_Qt_5_3_0_MinGW_32bit-Debug
目录 0 2017-03-21 16:58 HSV_matchShapes\HSV_matchShapes
目录 0 2017-03-09 10:20 HSV_matchShapes
----------- --------- ---------- ----- ----
778840 24
评论
共有 条评论