如何使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算法持续更长时间,跟踪一个没有移动的前景对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Docker 使 phpmyadmin 持续更长时间而不会超时