• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Как вывести найденные контуры в OpenCV?

Алёна

Well-known member
09.05.2020
86
0
BIT
0
Доброго времени суток читающим, хочу написать распознавалку текста на python при помощи OpenCV, контуры нахожу с помощью canny, после чего стоит задача извлечения каждого символа в отдельное изображение 28x28 (для удобной работы с MNIST); Я рисую прямоугольник вокруг каждого элемета, а затем складирую все буквы в список letters, но, тем не менее, проверяя результат и выводя какие-либо символы, получаю либо пустое окно, либо окно с точкой, либо окно со стрелочкой из нижнего левого угла изображения, но буквы вывести не получается;(
Очень прошу помочь!
 

Вложения

  • code1.png
    code1.png
    29,7 КБ · Просмотры: 251
  • code2.png
    code2.png
    144,5 КБ · Просмотры: 233

renat baidukov

Green Team
17.06.2020
10
1
BIT
0
Я много раз делал распознавание captcha логика всегда была одинаковая - создаешь базу символов для каждого шрифта который планируешь распознавать. Затем выделяешь строку, строку делишь на символы. Потом перебираеш для кождого квадратика символы из базы для скорости фильтуешь по размеру высоте\ширине. Но я все время делал без OpenCV - банально работаешь с BMP. Любую картинку очищаешь от мусора, превращаешь в чернобелую и потом уже обрабатываешь. Там все сводиться к работе с двумерными массивами. Процес распознавания, с точки зрения логики, сводиться к движению шаблона по выделенной области - квадратику обрамляющему букву. Твой текст прочитать как два пальца об асфальт, по сравнению с капчей.
 

Алёна

Well-known member
09.05.2020
86
0
BIT
0
Я много раз делал распознавание captcha логика всегда была одинаковая - создаешь базу символов для каждого шрифта который планируешь распознавать. Затем выделяешь строку, строку делишь на символы. Потом перебираеш для кождого квадратика символы из базы для скорости фильтуешь по размеру высоте\ширине. Но я все время делал без OpenCV - банально работаешь с BMP. Любую картинку очищаешь от мусора, превращаешь в чернобелую и потом уже обрабатываешь. Там все сводиться к работе с двумерными массивами. Процес распознавания, с точки зрения логики, сводиться к движению шаблона по выделенной области - квадратику обрамляющему букву. Твой текст прочитать как два пальца об асфальт, по сравнению с капчей.
Да, но я хочу сделать это с помощью OpenCV, поэтому хочу подробнее понять метод с сохранением каждой буквы, обрамленной в прямоугольник с помощью cv2.boundingrect
Вот и прошу подсказать, как сохранить каждую букву в форме ч/б изображения 28x28
 

renat baidukov

Green Team
17.06.2020
10
1
BIT
0
OpenCV хорошо документирован и там полно примеров. Прошло 2 дня и ты не разобрался, вероятно хочешь чтобы кто-то подсуетися за тебя. Попробуй поставить автарку в купальнике - может это поможет :)
 

Алёна

Well-known member
09.05.2020
86
0
BIT
0
OpenCV хорошо документирован и там полно примеров. Прошло 2 дня и ты не разобрался, вероятно хочешь чтобы кто-то подсуетися за тебя. Попробуй поставить автарку в купальнике - может это поможет :)
Вы о чем?

OpenCV хорошо документирован и там полно примеров. Прошло 2 дня и ты не разобрался, вероятно хочешь чтобы кто-то подсуетися за тебя. Попробуй поставить автарку в купальнике - может это поможет :)
И я документацию читала, разобралась с выделением буквы, контурированием объектов, доки про сохранение контуров не нашла
 

Алёна

Well-known member
09.05.2020
86
0
BIT
0
Я так уже пробовала, там ошибка есть
Контуры надо не с 0 сравнивать, а с -1
Но в любом случае хотелось бы еще вопрос задать: Как я могу находить объекты на фото по разнице цветов между соседними пикселями?
То есть если мне нужно найти объект одного цвета на фоне другого цвета, с помощью какой функции я могу обнаружить этот объект, если на фоне он сильно выделяется?

И кстати "w" выводится как "v" и "v", как это можно исправить?
 

moonz

Green Team
14.11.2017
39
19
BIT
7
Как я могу находить объекты на фото по разнице цветов между соседними пикселями?
То есть если мне нужно найти объект одного цвета на фоне другого цвета, с помощью какой функции я могу обнаружить этот объект, если на фоне он сильно выделяется?

Тебе нужна простая сегментация с помощью цветовых пространств, по этому поводу нашел вот такую
Если умеешь на английском читать то вот супер

И собственно пример из
 

Petro Goninec

Заблокирован
21.06.2020
15
0
BIT
0
И кстати "w" выводится как "v" и "v", как это можно исправить?

Я бы заметил, что это не просто "кстати" это один очень сщественных моментов. Особенно если текст скаанираванный или много мусора. могут быть проблемы с 3-8, 5-6, 9-0 и еще дофига всего. В распознавании используется вероявносная логика а не формальная. Оценивается количество точек фона и точек фигуры в шаблоне и объекте распознавания. Я добавлял еще прозрачные токчи - которые игнорируются.

Если вы - ЧЕЛОВЕК - ищете то, что можно тупо передрать, то шансов у вас мало. Нужно, придерживаться какой-то одно концепции распознавания. Придумать свою и эксперементировать или передрать полностью чужую. Кусок своей кусок чужой - толку не будет.
 

Алёна

Well-known member
09.05.2020
86
0
BIT
0
Тебе нужна простая сегментация с помощью цветовых пространств, по этому поводу нашел вот такую
Если умеешь на английском читать то вот супер

И собственно пример из
Спасибо, но с первой статьей я знакома, она не подходит, т.к. нужен код, которому заранее не известны цвета, который самостоятельно определяет границы (canny, например), вторая и третья статья не совсем понимаю, как должны помочь
Мне нужно складировать все найденные объекты (символы) в одну переменную (допустим список), затем их вывести именно в том порядке, в котором они встречаются на картинке
И также не очень понятно, как решить проблему с выделением "w" в три прямоугольника

Я бы заметил, что это не просто "кстати" это один очень сщественных моментов. Особенно если текст скаанираванный или много мусора. могут быть проблемы с 3-8, 5-6, 9-0 и еще дофига всего. В распознавании используется вероявносная логика а не формальная. Оценивается количество точек фона и точек фигуры в шаблоне и объекте распознавания. Я добавлял еще прозрачные токчи - которые игнорируются.

Если вы - ЧЕЛОВЕК - ищете то, что можно тупо передрать, то шансов у вас мало. Нужно, придерживаться какой-то одно концепции распознавания. Придумать свою и эксперементировать или передрать полностью чужую. Кусок своей кусок чужой - толку не будет.
У меня есть конкретная задача: выделить каждый символ в один отдельный прямоугольник, и я не понимаю, почему целостная буква выделяется аж в три фигуры, поэтому и прошу помощи, как это можно устранить, как сделать так, чтобы алгоритм canny целостные фигуры выделял в один прямоугольник
Или хотя бы понять, почему дабл ю выделяется как несколько разных символов
 

Petro Goninec

Заблокирован
21.06.2020
15
0
BIT
0
Или хотя бы понять, почему дабл ю выделяется как несколько разных символов
Скорее всего, в процессе распознавания к объекту распознавания применяются шаблоны которые меньше чем объект по размеру. Это же очевидно. Если ты не можешь управлять процессом распознавания подготавливай объекты так чтобы не было глюков. Почитй на каких принциах там работае распознаване. Это так сказать философия, реально я в вниткать в твой проблемы не хочу.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!