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

标签 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] 具有相同的值,不会改变。为什么?

最佳答案

如果不了解如何初始化函数的参数,就很难回答您的问题。但我的猜测是您的 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 
}

关于c++ - 为什么函数 calcOpticalFlowPyrLK 返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16241700/

相关文章:

opencv - 使用opencv进行颈部检测

c++ - Opencv c++Template/Pattern 匹配缩放和旋转不变量

c++ - 在框架上用opencv绘制一个矩形

c++ - 如何强制模板类型的常量性?

在我关闭程序之前,C++ 文件夹不会删除

c++ - 返回一堆值的接口(interface)

python - 使用 openCV 和 wxPython 从网络摄像头获取流

c++ - OpenCV::dnn::readNet 抛出异常

c++ - 它无法从对应的迭代器中定义 const_iterator

c++ - OPENCV CUDA -- getCudaEnabledDeviceCount 返回 0