#python #opencv #image-processing
#python #opencv #обработка изображений
Вопрос:
Я хочу сравнить два скриншота, содержащих текст. В основном оба скриншота содержат довольно отформатированный текст. Я хочу сравнить, отражается ли одинаковое форматирование на обоих изображениях, а также одинаковый текст, отображаемый в одном и том же месте на обоих изображениях.
То, как я делаю это прямо сейчас, это —
- Примените двусторонние фильтры, чтобы удалить подчеркивание текста.
- Примените пороговое значение со значением 180 в качестве минимального значения и очистите их
- Примените размытие по Гауссу к изображению, чтобы удалить незаполненный пробел между символами.
- Снова примените пороговое значение со значением 250 в качестве минимального значения.
- Вычисление контуров на изображениях
- Нарисуйте прямоугольную ограничительную рамку вокруг контуров
- используйте алгоритм O (n ^ 2), чтобы определить максимальный прямоугольник с перекрытием и сравнить текст внутри него.
Однако проблема заключается в том, что контуры, появляющиеся на обоих изображениях, разные, т. Е. На одном изображении количество контуров равно 38, а на другом — 53. Я хочу иметь общее решение и не хочу зависеть от содержимого изображения. Однако одно можно сказать наверняка: изображение содержит хорошо отформатированный текст.
Спасибо
Ответ №1:
Я не уверен, что понимаю, чего именно вы хотите, но чтобы получить ограничивающую рамку вокруг слова в изображении, я мог бы сделать это :
- Примените обработку, чтобы получить хорошее пороговое значение: только текст, фон черным, текст белым. Этот шаг зависит от типа и качества вашего изображения.
- Вычислите сумму каждой строки. Сумма должна отличаться от 0, где есть текст, и все строки в пространстве между каждой строкой должны быть нулевыми (вы можете установить пороговое значение для этого значения, если есть некоторый шум). Вы можете найти верхнюю / нижнюю строку для каждой строки текста
- Для каждой текстовой строки, найденной на шаге 2, вычислите сумму каждого столбца. То же, что и на втором шаге, столбцы с word должны отличаться от 0. Вы можете найти все пробелы между словами и буквами. Удалите все пробелы, которые слишком малы, чтобы быть пробелом между двумя словами.
- Поздравляем, у вас есть верхняя / нижняя строка и первые / последние столбцы каждого слова.
Комментарии:
1. Спасибо за ответ. Почему я это делаю, я хочу проверить, содержат ли два изображения одинаковый текст и имеют одинаковый формат, т.Е. форматирование одинаковое. Я должен быть в состоянии определить, нет ли их и как далеко они находятся. Можете ли вы предложить какой-то другой способ, если вы имеете в виду.
2. Если единственное преобразование между 2 скриншотами — это только перевод, вы можете использовать взаимную корреляцию. если они идентичны, максимум должен быть равен сумме квадратов одного изображения. Вы могли бы знать, совпадает ли текст, но я не думаю, что он будет очень надежным. Вы можете использовать мой предыдущий ответ, чтобы подсчитать количество слов, сравнить поверхность для каждого слова (по одному)