利用手勢控制arduino輸出埠

2021-07-13 17:14:17 字數 1862 閱讀 7249

#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 ...