2016-04-28 45 views
1

我是新手,我想檢測一個手指是否會在屏幕上繪製一條線,我閱讀了一些教程,我正在跟蹤手指點並且正在更新不斷。我做下面的事情。當我移動手指時,它確實畫了一條短紅線,但它是短暫的,並在之後立即消失。我需要畫線留在那裏,但我不知道如何去做,我找不到解決方案,我真的很希望聽到你的消息,非常感謝你。通過在opencv中跟蹤手指畫線

int lastx = -1; 
int lasty = -1; 

void trackingfinger(....) 
{ 
......... 
if(drawing == true) 
    draw(BGR_frame,Point finger) 
} 


void draw(BGR_frame, Point finger) 
{ 
    int x = finger.x; 
    int y = finger.y; 

    if (lastx > 0 && lasty > 0 && x > 0 && y > 0) 
    { 
    line(BGR_frame, Point(x, y), Point(lastx, lasty), Scalar(0, 0, 255), 2); 
    } 

    lastx = x; 
    lasty = y; 
} 

int main (void) 
{ 
while(true) 
{ 
..... the function is called here. 
} 
} 
+1

推回新點到一些動態數組(例如一個std :: vector),然後遍歷整個數組並繪製從點到點的線。 – Micka

+1

@Micka它的作品!感謝您的想法。我忘了檢查數組,必須至少有兩個元素才能運行。 – pexichdu

+0

很高興聽到。只是輸入了一個答案,但被打斷了:D – Micka

回答

0

如果我正確理解了代碼部分的代碼,就不能這樣做。你如何決定什麼時候開始繪畫,什麼時候該結束? line函數需要一個起點和一個終點。

無論是「畫」逐像素,都使手指移動,如果你想讓它跟隨手指=>到底,也不會是一個行

或實施某種行動的座標,這將告訴「現在手指指向起點」和「現在它指向終點」

+0

它應該在只有一個手指起來時開始繪製,如果有多個手指向上(我使用凸起缺陷)就會停止。抱歉不清楚,現在我用一個動態數組來保存所有的點並循環繪製它,你留下來我檢查它必須有2點以上才能避免老錯誤,謝謝 – pexichdu