如何使openCV背景减法KNN算法持续更长时间,跟踪一个没有移动的前景对象

Posted

技术标签:

【中文标题】如何使openCV背景减法KNN算法持续更长时间,跟踪一个没有移动的前景对象【英文标题】:How can I make openCV Backgroundsubtraction KNN algorithm last longer, tracking a foregound object which is not moving 【发布时间】:2015-10-08 14:36:09 【问题描述】:

我正在尝试减去这个积木。 .

为此,我使用的是 opencv 3.0 提供的 KNN 算法。 为了初始化背景模型,我使用了 40 帧,没有砖块。

总而言之,它运作良好。 (带阴影的砖)

唯一的问题是算法在第 58 帧左右开始丢砖

(图片显示第 62 帧)

在第 64 帧之后,我只得到黑色图像。我知道如果砖块会移动就不会发生这种情况,但不幸的是,有很长的序列不会发生这种情况。

有人知道解决办法吗?

PS:我试着玩弄

的历史参数
cv::createBackgroundSubtractorKNN(int history,double Threshold, bool detectShadows= true)

但是history = 500 or history = 500000没有区别

【问题讨论】:

可能相关:***.com/questions/32440419/… 是的,这是一个相关的问题,但遗憾的是没有人回答他的问题。也许我的问题更幸运。无论如何,非常感谢。 【参考方案1】:

一个简单但缓慢的解决方案是每五帧重新初始化一次背景模型。

for (size_t i = 0; i < imageList.size(); i++)
    if (i % 5 == 0)
        for (auto& it : backgroundList)

            string nextFrameFilename(it.string());
            frame = cv::imread(nextFrameFilename);
            pMOG->apply(frame, fgMaskMOG2);
            imshow("Frame", frame);
            imshow("FG Mask MOG 2", fgMaskMOG2);
            keyboard = cv::waitKey(30);
        
    

【讨论】:

以上是关于如何使openCV背景减法KNN算法持续更长时间,跟踪一个没有移动的前景对象的主要内容,如果未能解决你的问题,请参考以下文章

cocos2d如何使加载图像持续更长时间?

如何使用 Docker 使 phpmyadmin 持续更长时间而不会超时

OpenCV的滚球背景减法算法

您可以让 Google OAuth 2.0 访问令牌持续更长时间吗?

如何紧固Knn算法进行实时人脸识别

用 std::chrono 计算持续时间在需要很长时间时给出 0 纳秒