Вопрос по opencv, ocr – Findcontours восстановить контуры без сортировки

3

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

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

Ваш Ответ

1   ответ
9

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

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

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

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

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

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

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

enter image description here

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

enter image description here

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

Похожие вопросы