为什么函数calcOpticalFlowPyrLK返回相同的值?

时间:2013-04-26 17:05:26

标签: c++ opencv

我正在做一个opencv应用程序,我正在使用de LucasKanada算法。 我用这个函数:

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

计算点的新位置,但是例如点[1] [2]具有与点[0] [2]相同的值,而不是改变。为什么呢?

1 个答案:

答案 0 :(得分: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 
}