我在 VS2010 中使用带有 cvblob.h 的 opencv 2.0,我制作了一个检测黄色斑点的程序。现在我想做的是对这些斑点进行编号,无论它们是否移动。我知道 label 属性对于给它们编号很有用,但我已经尝试过了,当一个 blob 被移动时,标签会改变。如何保存“初始”标签编号?
问问题
1868 次
2 回答
1
你想要的是跟踪 blob。跟踪 blob 意味着您逐帧跟踪 blob。这样,您将拥有一个标识移动对象(随着时间的推移而出现的斑点)的数字。
为此,您必须编写自己的跟踪算法(根据您的具体问题)或使用 cvBlob 附带的跟踪功能,这些功能远非完美,但对测试目的很有用。
您在 cvBlob 包中有代码示例。尤其:
http://cvblob.googlecode.com/svn/trunk/samples/red_object_tracking.cpp http://cvblob.googlecode.com/svn/trunk/test/test_tracking.cpp
于 2012-03-07T11:19:18.653 回答
0
通过说您希望 blob 保留其初始标签,您实际上是在尝试跟踪它们。这相当于实现了一个多对象跟踪系统。相信我,事情并没有你想的那么简单。
您需要在帧之间建立某种对应关系。
如果 blob 在帧之间没有太大变化,您可以尝试在一帧中找到每个 blob 的几何中心,在随后的帧中,您可以尝试找到最接近前一帧中找到的中心的 blob。然后将先前的标签分配给新的 blob。以此类推……
于 2012-03-04T19:30:27.390 回答