C++中的连通组件标记

4
我需要在C++应用程序中对图像使用连通组件标记算法。我可以自己实现,但我试图使用Boost的并查集/不相交集合实现,因为它在并查集维基文章中提到过。
我无法弄清如何创建disjoint_sets对象,使其与我拥有的图像数据(unsigned shorts)一起工作。我错过了什么?Boost文档中的示例对我来说毫无意义。当我有一个图像时,我是否需要所有额外的Graph玩意儿?或者,已经有一个OpenCV连通组件标记实现了。目前,我们正在使用OpenCV 1.1pre1和Boost 1.37。
4个回答

3
令人惊讶的是,OpenCV中没有CCL。不过,在参考手册中有一种变通方法。请参见cvDrawContours示例。当我尝试使用它时,在图像的第一行、最后一行和第一列、最后一列上出现了一些奇怪的行为,但我可能做错了什么。
另一种方法是使用cvBlobs库。

cvDrawContours的示例不太符合我的要求。cvBlobs库可能是一个选择,但我还不确定是否需要为此添加另一个库。不过我会记住这个建议的,谢谢。 - Jay Sheridan

1

我们最终自己编写了CCL和Union-Find算法,使用在维基百科和其他地方找到的描述。这似乎比为此目的添加另一个库到我们的应用程序更容易和更快。


1
另一种可能性是使用Ali Rahimi提供的源代码,您可以查看this

那看起来很熟悉。我可能在处理这个问题时实际上读过那个页面。 - Jay Sheridan

0

我能够使用boost库的disjoint_sets进行连通组件标记。 但是为了测试,我尝试创建一个像素强度值与其标签相同的图像。 这导致了问题,我还没有能够处理它。请看线程


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