2012-03-02 74 views
1

我在VS2010中使用opencv 2.0和cvblob.h,并且制作了一个检测黄色斑点的程序。现在我想要做的就是对这些斑点进行编号,不管它们是否移动。我知道标签属性对于编号有用,但我已经尝试过,当一个blob被移动时,标签会改变。我怎样才能保存“初始”标签号码?如何在cvblob上放置blob标签?

+0

我解决它。正如你所说,我基于斑点区域实现了一个简单的多目标跟踪系统,它只能在二维上移动,所以它们的区域不会改变。 – Tapia 2012-04-16 21:14:17

回答

1

你想要的是跟踪斑点。跟踪斑点意味着你跟踪帧与帧之间的斑点。这样,你将有一个数字来标识移动的对象(随着时间的推移blob)。

要做到这一点,您必须编写自己的跟踪算法(根据您的具体问题)或使用cvBlob附带的跟踪功能,这些功能远非完美但对测试有用。

你有cvBlob包中的代码示例。特别是:

http://cvblob.googlecode.com/svn/trunk/samples/red_object_tracking.cpp http://cvblob.googlecode.com/svn/trunk/test/test_tracking.cpp

0

通过说你想要blob坚持他们的初始标签,你基本上试图跟踪他们。这相当于实现一个多目标跟踪系统。相信我并不像你想象的那么简单。

您需要在帧之间建立某种对应关系。

如果帧之间的斑点变化不太大,您可以尝试在一帧中找到每个斑点的几何中心,并在随后的帧中尝试找到距前一帧中心最近的斑点。然后将以前的标签分配给新的斑点。 依此类推......

+0

是的,我有一个代码跟踪2个斑点(知道他们的位置),但是当我在相机上交换他们的位置时,他们的标签会改变。有没有办法“保留”每个斑点的标签? – Tapia 2012-03-05 21:33:37

+0

由库函数完成的标签是基于它首先检测到的blob。如果您希望标签不要更改,则意味着您期望blob检测算法也可以跟踪您的斑点。哪些不会发生 – bubble 2012-03-06 02:41:05