我试图理解作为OpenCV示例代码提供的blobtrack.cpp代码。在此代码中,使用了名为CvBlobTrackerAuto的类。我试图找到一些关于这个类的文档,但它没有提供详细的解释。
我对……特别感兴趣CvBlobTrackerAuto::Process(IplImage *pImg, IplImage *pMask = NULL)
函数。这是做什么用的这个面具的任务是什么?
提前感谢
过去几周我一直在和CvBlobTrackerAuto
一起工作。以下是我弄明白的一些事情。
CvBlobTrackerAuto::Process
用于处理最后捕获的图像,以更新跟踪信息(blob id和位置)。实际上,CvBlobTrackerAuto
是一个抽象类,因为它不提供CvBlobTrackerAuto::Process
的实现。唯一的具体实现(据我所知)是CvBlobTrackerAuto1
,它可以在blobtrackingauto.cpp中找到。
CvBlobTrackerAuto1::Process
所做的是实现以下管道:
- 前景检测:生成与前景对应的二进制掩码。
- Blob跟踪:更新Blob的位置。它可以使用平均位移,粒子滤波器或这些的组合。
- 后处理:(我不确定这部分是做什么的)。
- Blob删除:根据那里的评论,它是"实验性和简单的"。它删除在最后一帧中太小或靠近图像边界的斑点。
- Blob检测:检测新的Blob。看到enteringblobdetection.cpp。
- 轨迹生成:(不确定它做什么)。 跟踪分析:(不确定它是做什么的。但我确实记得我读过代码,并决定它对blob跟踪没有影响,所以我禁用了它。
在CvBlobTrackerAuto::Process
的这个特殊实现中,pMask
参数没有任何用途。它的默认值为NULL,它被分配给一个变量一次,只在几行之后被覆盖。
在samples/c/blobtrack_sample.cpp中找到的OpenCv示例是围绕这个CvBlobTrackerAuto1
类构建的,为管道中的每个模块提供不同的选项。
当我在OpenCV邮件组中发布相同的问题时,我被引导到这个链接。本文档解释了OpenCV Blobtracker及其模块。