2010-11-11 3 views
2

Я хочу определить область (ЖК-экран), которая содержит несколько цифровых чисел, что я пытаюсь сделать: 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

+0

Вы можете выполнить цикл на v_next-> h_next и подсчитать детей. Потому что они представляют собой зацикливание, это дешевая операция, не волнуйтесь. – nimcap

+0

Огромное вам спасибо за вашу помощь, у меня есть еще одна вещь, чтобы убедиться, что для h_next и h_prev эти два могут связывать только последовательности, которые имеют один и тот же родительский, не так ли? Если два ребенка из двух разных родителей, они не могут использоваться h_next, верно? – viper

Смежные вопросы