OpenCV函数CvBGStatModel

4
我想知道这个函数 CvBGStatModel() 的工作原理。我的意思是说,它使用了什么算法,如何与平均值和帧差异算法相比提供更好的结果。

提前感谢您的回复。

1个回答

3

CvBGStatModel()是一个类,而不是一个函数。例如,您可以像这样创建此类:

IplImage* temp = NULL;
temp = cvLoadImage( "temp.jpg" );
CvBGStatModel* background_model = cvCreateGaussianBGModel(temp);

你需要调用一个函数来更新背景/前景模型(参见示例):

请看样例

cvUpdateBGStatModel( temp, background_model );

因为它将像素信息存储为更好地代表该像素的高斯分布的混合物。这意味着只要更好地代表它的高斯分布被认为是背景,就不会将几帧内值发生变化的像素视为前景。高斯分布是加权的。一个高斯分布被认为是背景的时间越长,它的权重就越大。相比之下,帧差算法仅考虑帧之间的差异,而不考虑这些差异的一致性和可靠性。

我还有一个疑问,我正在使用opencv 2.0,但该类在其中不可用,所以请问应该使用哪个版本?谢谢您及时的回答,真的很有帮助。另外,我试图在视频中计算汽车数量。我的算法基于矩形检测,但不幸的是,它将单个汽车计为由3个矩形组成,因此结果不是所需的结果。有人可以帮我改进这个算法或者提供更好的算法,非常感谢。 - user1386438
我建议您始终使用最新版本的OpenCV。我使用2.3.1,但现在有2.4可用。如果您没有此类可用,则肯定会有等效的、改进的接口:http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html?highlight=background#backgroundsubtractormog2 - Jav_Rock
你能就算法方面提供一些建议吗? - user1386438
最好另外提一个问题来讨论算法,并从这里链接过去。它们是不同的事情,在不同的问题中更清晰。我认为使用矩形的方法不合适,我会寻找这种情况下的常见方法。 - Jav_Rock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接