2010-11-11 112 views
2

我想检测包含多个数字数字的区域(LCD屏幕),我想要做的是: 1.使用cvCanny()将图像转换为边缘图像, 2.使用cvFindContours( )来检测轮廓,这里我使用TREE模式 3.检测每个轮廓及其子数,如果子数大于某个数,再加上轮廓面积和纵横比,即我感兴趣的区域 我的问题是我使用for(; contours!= NULL; contours = contours-> h_next)循环,但是我只能够获得树的最高级别及其直接数目孩子,其余的似乎不包括这样,反正我有办法通过每个轮廓,并得到每个人的孩子数量?轮廓发现

谢谢!

回答

4

你在找什么是contours->v_next。它用于访问轮廓的子轮廓。 h_next用于迭代同一级别的轮廓。也许你已经猜到了^h代表水平v代表垂直

当然,在使用cvFindContours()时一定要用CV_RETR_TREE方法以树形方式获取轮廓。

+0

感谢您的回复。是的,我知道v_next,但如何处理我的问题?假设我有10个不同的图像,我无法逐一浏览树。 – viper 2010-11-11 08:42:55

+0

您可以在v_next-> h_next上循环并计数孩子。因为他们是指针循环是一个便宜的操作,不要担心。 – nimcap 2010-11-11 08:44:58

+0

非常感谢您的帮助,我只有一件事要确定,对于h_next和h_prev,这两个只能链接具有相同父代的序列,对吗?如果来自两个不同父母的两个孩子,他们不能被h_next使用,对吧? – viper 2010-11-11 22:30:35