C++ 为什么函数calcOpticalFlowPyrLK返回相同的值?
我正在做一个opencv应用程序,我正在使用de Lucaskanda算法。 我使用此功能:C++ 为什么函数calcOpticalFlowPyrLK返回相同的值?,c++,opencv,C++,Opencv,我正在做一个opencv应用程序,我正在使用de Lucaskanda算法。 我使用此功能: calcOpticalFlowPyrLK(pregray, gray,points[0], points[1], status, err, Size(31,31),3, termcrit, 0, 0.001); 计算点的新位置,但点[1][2]的值与点[0][2]的值相同,不会发生变化。为什么?如果不了解如何初始化函数的参数,就很难回答您的问题。但我猜你的prevgray图像与gray图像相同 Mat
calcOpticalFlowPyrLK(pregray, gray,points[0], points[1], status, err, Size(31,31),3, termcrit, 0, 0.001);
计算点的新位置,但点[1][2]的值与点[0][2]的值相同,不会发生变化。为什么?如果不了解如何初始化函数的参数,就很难回答您的问题。但我猜你的
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
}
请不要发布所有cap问题标题。什么是
点
?定义在何处,引用在何处?点[0][0]、[0][1]和[0][2]的值建立在Main上,此函数仅计算这些点的新位置,并将其新闻位置推送到向量点[1][x]中。通常,此函数不会为点[0]
和点[1]
返回相同的值。我无法回答您的问题,除非看到您如何初始化提供给函数的参数。我猜你的prevgray
图像与gray
相同。