【问题标题】:Background subtraction and Optical flow for tracking object in OpenCV C++OpenCV C++中目标跟踪的背景减法和光流
【发布时间】:2016-01-12 03:26:31
【问题描述】:

我正在开展一个项目,使用背景减法检测感兴趣的对象,并使用 OpenCV C++ 中的光流跟踪它们。我能够使用背景减法检测到感兴趣的对象。我能够在单独的程序上实现 OpenCV Lucas Kanade 光流。但是,我被困在如何将这两个程序放在一个程序中。 frame1 保存视频中的实际帧,contours2 是从前景对象中选择的轮廓。

总而言之,如何将通过背景减法获得的前景对象提供给calcOpticalFlowPyrLK?或者,如果我的方法错误,请帮助我。提前谢谢你。

Mat mask = Mat::zeros(fore.rows, fore.cols, CV_8UC1);
    drawContours(mask, contours2, -1, Scalar(255), 4, CV_FILLED);

    if (first_frame)
    {
        goodFeaturesToTrack(mask, features_next, 1000, 0.01, 10, noArray(), 3, false, 0.04);
        fm0 = mask.clone();
        features_prev = features_next;
        first_frame = false;
    }
    else
    {           
        features_next.clear();
        if (!features_prev.empty())
        {
            calcOpticalFlowPyrLK(fm0, mask, features_prev, features_next, featuresFound, err, winSize, 3, termcrit, 0, 0.001);
            for (int i = 0; i < features_prev.size(); i++)
                line(frame1, features_prev[i], features_next[i], CV_RGB(0, 0, 255), 1, 8);
            imshow("final optical", frame1);
            waitKey(1);
        }
        goodFeaturesToTrack(mask, features_next, 1000, 0.01, 10, noArray(), 3, false, 0.04);
        features_prev = features_next;
        fm0 = mask.clone();         
    }

【问题讨论】:

    标签: opencv opticalflow background-subtraction


    【解决方案1】:

    您使用光流进行跟踪的方法是错误的。光流方法背后的想法是,两个连续图像中的移动点在起点和终点具有相同的像素强度。这意味着通过从开始图像观察其外观并在结束图像中搜索结构来估计特征的运动(非常简化)。

    calcOpticalFlowPyrLK 是一个点跟踪器,这意味着之前图像中的点被跟踪到当前图像。因此,这些方法需要系统的原始灰度值图像。因为它只能估计结构化/纹理区域的运动(您需要图像中的 x 和 y 梯度)。

    我认为你的代码应该像这样:

    1. 通过背景减法(按轮廓)提取对象,这在文献中称为 blob
    2. 提取下一张图像中的对象并应用 blob 关联(哪个 countour 属于谁)这也称为 blob-tracken 可以使用 calcOpticalFlowPyrLK 进行 blob 跟踪。例如。以一种非常简单的方式:
    3. 从计数或 blob 内的点跟踪点。
    4. 关联:如果属于前一个轮廓的点轨迹位于当前计数,则前一个轮廓是当前轮廓之一

    【讨论】:

      【解决方案2】:

      我认为 OpenCV 中背景减法的输出不是灰度图像。对于输入光流,我们需要灰度图像。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-29
        • 1970-01-01
        • 2012-03-30
        • 1970-01-01
        • 2011-12-19
        相关资源
        最近更新 更多