Findcontours восстановить контуры без сортировки

Мы реализуем OCR, используя opencv для Android, все шло хорошо, пока часть поиска контуров с помощью Imgproc.findcontours () не вернула контуры не в том порядке, в котором они были во входном изображении. т.е. входное изображение M N O P первый контур получает из findcontours () это P входное изображение E F G H первый контур получает от findcontours () это E (здесь справа) входное изображение I J K L первый контур получает из findcontours () это J так что кажется, что он извлекает контуры случайным образом, как мы можем это исправить? потому что мы хотим вернуть слово, как оно было написано именно на картинке

 Abid Rahman K21 июн. 2012 г., 18:25
да, я использовал моменты, чтобы получить центроиды. Это хорошо.
 Abid Rahman K21 июн. 2012 г., 17:45
Я тоже раньше чувствовал эту проблему. Теперь я сортирую их, как хочу, используя их центроиды (конечно, дополнительная работа)
 Hend Mohamad21 июн. 2012 г., 18:18
Вы использовали моменты ()? это надежно? и это восстанавливает центроид m.get_mu02 ()?
 Hend Mohamad21 июн. 2012 г., 18:29
какая функция восстановить центроид? когда я наберу m. я получаю много вариантов и никакой документации, чтобы сказать мне, какой из них дает мне центроид .. спасибо заранее

Ответы на вопрос(1)

OpenCV, похоже, не имеет никакого порядка при поиске контуров. Если нам нужно это отсортировать, мы должны сделать это вручную, что является дополнительной задачей.

Но для целей OCR у меня тоже была эта проблема. Так что я сделал, чтобы найти центроиды обнаруженных контуров. Это можно выяснить, используя моменты.

Нахождение центроида с помощью моментов

Или вы можете найти ограничительную рамку контура, а затем найти центр этой ограничительной рамки. Позже после ocr поместил данные на тот же центроид.

Это был метод, который я использовал, когда сам готовил OCR. Вы можете найти полную информацию в этом вопросе SOF:OCR распознавания простых цифр в OpenCV-Python

EDIT : Заказ FindContours, (после комментария от vasile)

Исходное изображение:

enter image description here

Порядок расположения контуров:

enter image description here

 21 июн. 2012 г., 21:12
@vasile: К сожалению, шрифты немного малы, если их увеличить, перепутайте. Но это читабельно, а некоторые помечены не по порядку.
 Hend Mohamad22 июн. 2012 г., 12:36
Спасибо вам за то, что вы действительно помогли мне, это сделано в моем коде, теперь я отсортировал контуры, основываясь на их центроиде .. спасибо
 21 июн. 2012 г., 21:08
Но я почувствовал это противоположным образом, снизу справа, потому что именно так я и поступил во всех случаях. Может быть, я просто загрузить его сейчас.
 22 июн. 2012 г., 16:02
& quot; Лучший способ выразить благодарность в SOF - это проголосовать или принять ответы & quot; - кто-то так сказал. Может быть, вы можете сделать это.
 21 июн. 2012 г., 21:05
OpenCV findContours реализует очень специфический порядок алгоритмов при извлечении контуров, просто порядок отличается от того, что вы ожидаете :) Он сканирует изображение сверху вниз и слева направо. Итак, J, который на пиксель выше, чем остальные, будет извлечен перед A, например

Ваш ответ на вопрос