資源簡介
一般做手形識別,會先做膚色分割,因為人的皮膚顏色(黃種人哈),在HSV顏色空間下,和背景相比有明顯的差別,所以利用膚色可以很好的提取手的區(qū)域。
在此 我使用形狀匹配(matchShapes)來做,手形的對比,識別出手形代表的數(shù)字意義。當然這種方法非常依賴于模板的豐富性,有很大的局限性。

代碼片段和文件信息
/*
?*?攝像頭讀取-->
?*?HSV顏色空間轉(zhuǎn)換及通道分離-->
?*?膚色分割-->
?*?中值濾波-->
?*?輪廓檢測及過濾-->
?*?輪廓形狀匹配
?*
?*/
#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;?????????????????//最終結(jié)果
Mat?resultRGB;??????????????//將結(jié)果顯示在原圖
int?match_number?=?-1;
//模板總數(shù)
#define?TEMPLATE_NUMS???(10)
vector?>?mContoursTemp;??//輪廓模板集
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);
//?在圖片的左上角標注數(shù)字
void?number_draw(Mat?&img?int?num);
//?將Mat中的每個元素設置為某個數(shù)值
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!“?<????????return?-1;
????}
????Mat?kernel?=?getStructuringElement(MORPH_RECT?Size(KERNEL_SIZE?KERNEL_SIZE));
????while(true)
????{
????????//?獲取圖片幀
????????capture?>>?frame;
????????if(true?==?frame.empty())
????????{
????????????cout?<“get?no?frame“?<????????????break;
????????}
????????//?顯示原始圖片
????????imshow(“original“?frame);
????????resultRGB?=?frame.clone();
????????//?轉(zhuǎn)換HSV顏色通道
????????cvtColor(frame?frame?CV_BGR2HSV);
????????//?HSV通道分離
????????split(frame?channels);
????????frameH?=?channels[0];
????????//?顯示H通道圖片
//????????imshow(“H-channels“?frameH);
????????//?膚色分離-使用OpenCV自帶函數(shù)
????????inRange(frameH?Scalar(minVal)?Scalar(maxVal)?result);
????????//------------------------------濾波平滑-----------------------------
????????//?中值濾波:?可以很好的去除椒鹽噪聲,而且ksize越大效果越好。
????????medianBlur(result?result?11);
????????//----------------------------形態(tài)學運算-----------------------------
????????/*
?????????*?腐蝕?MORPH_ERODE
?????????*?膨脹?MORPH_DILATE
?????????*?開運算?MORPH_OPEN
?????????*?閉運算?MORPH_CLOSE
?????????*?形態(tài)學梯度?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
評論
共有 條評論