#include
#include
#include
#include
#include
#include
using
namespace cv;
using
namespace
std;
mat frame;
handle hcomm;
lpcwstr pstr=l"com4";
char lpoutbuffer[100];
dword dwbyte=100;
vector
five;
vector
zero;
mat ycrcb_detect(mat input)
}return output;
}mat detect(mat original)
}rotatedrect box=minarearect(contours_hull[biggestid]);
int boxarea=box.size.area();
size frame_size=frame.size();
if (boxarea>frame_size.area()/10)
double m1=matchshapes(zero,hull,cv_contours_match_i1,0);
double m2=matchshapes(five,hull,cv_contours_match_i1,0);
bool can=purgecomm(hcomm,purge_txclear);
m1>m2?lpoutbuffer[0]='a':lpoutbuffer[0]='b';
bool ne=writefile(hcomm,lpoutbuffer,dwbyte,&dwbyte,null);}}
}//imshow("mask_show",mask_show);
return mask;
}int main()
else
dcb dcb;
getcommstate(hcomm,&dcb);
dcb.baudrate=9600;
dcb.bytesize=8;
dcb.parity=noparity;
dcb.stopbits=twostopbits;
bool
set=setcommstate(hcomm,&dcb);
bool sup=setupcomm(hcomm,1024,1024);
videocapture cap(0); // open the default camera
mat m_zero,m_five;
filestorage fs("zero_finger.xml", filestorage::read);
fs["zero_finger"] >> m_zero;
fs.release();
zero=mat_(m_zero);
filestorage fs2("five_finger.xml", filestorage::read);
fs2["five_finger"] >> m_five;
fs2.release();
five=mat_(m_five);
if (!cap.isopened())
return -1;
while (true)
return
0;}
整個程式其實很簡單,首先膚色識別,然後提取手的部分,根據hu矩匹配去識別手勢,最後根據識別到的手勢傳送不同的命令到arduino串列埠,最終實現手勢控制。後期可以增加其他功能,手勢部分其實可以通過多個模板利用svm進行識別,增加手勢靈活性。 使用手勢控制
1,uipangesturerecognizer pangesturerecognizer uipangesturerecognizer alloc initwithtarget self action selector handlepangesturerecognizer 2,void handl...
利用arduino 控制舵機轉動
買來的舵機通過杜邦線將舵機的與arduino板相連,此處所用的arduino為2560的,所以通過arduino的整合開發環境時應選擇該版本,以及選擇好對應的埠,這樣才能上傳成功,這裡舵機有三條線,其中那條灰色的線接到板子上標有gnd的介面,中間的線接到5v介面,另外那條線應該接到標有pwd那排裡,...
OpenCV利用手勢識別實現虛擬拖放效果
目錄 本文將實現一些通過手拖放一些框,我們可以使用這個技術實現一些遊戲,控制機械臂等很多有趣的事情。通過opencv設定顯示框和呼叫攝像頭顯示當前畫面 import cv2 cap cv2.videocapture 0 cap.set 3,1280 cap.set 4,720 while true ...