基于python+opencv實(shí)現(xiàn)簡(jiǎn)易手勢(shì)識(shí)別(上下左右)
本來是一個(gè)小組作業(yè),最后分給了我用攝像頭實(shí)現(xiàn)手勢(shì)識(shí)別,又不太想用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),就直接基于輪廓檢測(cè)實(shí)現(xiàn)了。
不過值得一提的是,似乎誤差較大,受環(huán)境影響較大。
實(shí)驗(yàn)內(nèi)容:將手掌放至在紅色方框內(nèi),然后像下圖一樣,進(jìn)行擺放姿勢(shì),確定上下左右。




都?工科生了,就別噴臉了
不清楚后續(xù)會(huì)不會(huì)更新,修改使用更好的算法。
不過肯定應(yīng)該會(huì)更新C++甚至是C版本的,看小組內(nèi)其他人的需求吧。
不過首先還是看一下,我們是如何確定上下左右的吧:
值得一提的是,slope列表是用來存儲(chǔ)上圖中的那些紅色斜線的斜率。
也就意味著,我們必須要求slope要大于1才能進(jìn)行上下左右的判斷。(如果是1,此時(shí)我們已經(jīng)把手掌縮起來了,故這里我只檢測(cè)到了1個(gè),就設(shè)成下了)
向上,意味著多個(gè)斜率,其中要有一個(gè)是大于1,有一個(gè)是小于-1;注意,這里是說多個(gè),有就行了。
然后那個(gè)什么any_greater是自己隨便寫的一個(gè)很簡(jiǎn)單的函數(shù),屬實(shí)是丑陋;
那么同理,向左呢?除去向上的前提,還要求斜率要全都大于0(圖像是鏡像的,所有是大于,而不是小于)。
向右同理。
那么向下,我們這里繼續(xù)縮小斜率,然后順便改了一下斜率值。因?yàn)橄蛳?,他改變了凹凸點(diǎn)...然后線就少了,就在這里做了一些改變。
下面是代碼:
屬實(shí)是丑陋了....

洗澡的時(shí)候還是覺得太丑陋了
于是改了
這下舒服了...