2013-04-26 61 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 
} 
相关问题