我正在做一个opencv应用程序,我正在使用de LucasKanada算法。 我用这个函数:
calcOpticalFlowPyrLK(pregray, gray,points[0], points[1], status, err, Size(31,31),3, termcrit, 0, 0.001);
计算点的新位置,但是例如点[1] [2]具有与点[0] [2]相同的值,而不是改变。为什么呢?
答案 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
}