2013-04-26 85 views
0

我正在做一個opencv應用程序,我正在使用de LucasKanada算法。 我使用此功能:爲什麼函數calcOpticalFlowPyrLK返回相同的值?

calcOpticalFlowPyrLK(pregray, gray,points[0], points[1], status, err, Size(31,31),3, termcrit, 0, 0.001); 

來計算點的新的位置,但e.g點[1] [2]具有相同的值,所述點[0] [2],不改變。爲什麼?

+2

請不要發佈全部問題題目。 – Angew 2013-04-26 17:07:52

+0

什麼是「點」?它在哪裏定義,你在哪裏引用它? – Madbreaks 2013-04-26 17:13:10

+0

在Main上建立點[0] [0],[0] [1]和[0] [2]的值,該函數僅計算這些點的新位置,並將其新聞位置推向矢量點[ 1] [x] – user2087826 2013-04-26 17:18:46

回答

1

沒有看到你如何初始化函數的參數很難回答你的問題。但我的猜測是您的prevgray圖像與gray相同。

Mat對象的複製操作符(即=)只會複製標題和指向矩陣的指針,而不是數據本身。如果您從相機抓取圖像,請確保複製圖像數據。類似這樣的:

VideoCapture cap; 
cap.open(0); 
Mat frame, gray, prevgray; 

for(;;) 
{ 
    cap >> frame; 
    gray = rgb2gray(frame); 

    calcOpticalFlowPyrLK(pregray, gray,points[0], points[1], status, err, 
     Size(31,31),3, termcrit, 0, 0.001); 

    gray.copyTo(prevGray); // make sure you copy the data 

    // if you do      
    // prevgray = gray; 
    // then in the next iteration gray and prevgray will point to the same data 
} 
相關問題