Как найти объект на изображении с помощью python?

Здравствуйте! Я принимаю участие в московской олимпиаде школьников и на данный момент столкнулся с невиданными трудностями в решении.
Дело в том, что следующая задача (третья) полностью отличается от того, что обычно даётся на олимпиадах по спортивному программированию: на вход даётся тысяча изображений в формате .gif, на которых нарисован круг, квадрат или треугольник (примеры прикреплены к посту). Также для каждой картинки есть файл .txt, состоящий из нулей и единиц, где ноль- белая точка, единица - чёрная.
На выходе для каждой картинки нужно написать square, triangle или cirlce, в зависимости от того, что изображено.
Какие методики решения вы можете предложить, кроме как перебор руками и изучение какого-нибудь mathlab-а (я слышал он очень неплохо справляется с подобными задачами). Ранее никогда не сталкивался с image processing.
Квадрат
5003fb64eed64223942ecf07bdea504e.gif
Треугольник
00145dae8f4241798351af3339bedd4b.gif
Круг
8e37ede0bc8149c295674d998a52a486.gif
  • Вопрос задан
  • 6559 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Alezer
Как бы сделал я, имея некоторый опыт олимпиадного программирования (если правильно понял условия задачи)
1. Считать текстовый файл в двумерный массив.
2. Найти первую и последние ненулевые строки (слева, справа, снизу, сверху)
3. Завести 4 переменных под хранение "веса" первых ненулевых строк
4. Сравнить попарно левые и правые значения, верхние и нижние. У треугольника значения 2х сторон будут различаться, у квадрата будут равны все 4 значения(или если прямоугольник засветится, то равны попарно),
если значения всех строк равны 1, то это круг (вряд ли будет квадрат с одним пикселем)

4.1 Возможна ситуация, что круг начинается не с одного пикселя, тогда сделать разветвление в 4 пункте:
если "вес" граней одинаков, то проверить в глубину следующие стороны, если они равны внешним граням, то перед нами квадрат, если они больше внешних граней, то круг.

При условии, что фигуры не имеют дырок внутри.
Ответ написан
zelsky
@zelsky
PIL почитай доки .

Если площадь у все триуг = икс
квадратов = игрик
кругов = зет

Тогда просто по весу в плоть до байта можно различить.
Ответ написан
kivsiak
@kivsiak
software engineer
Если бы это не было оллимпиадным программированием я бы советовал куруть opencv. Но тут вам явно требуетя решение проще
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы