Если не так назвал тему поправьте возможно это можно сделать по другому, сейчас расскажу задачу, а вы если знаете подскажите пожалуйста. программка периодический показывает разные картинки круг квадрат ромб треугольник многоугольник Цвета картинок всегда разные, размер картинки не меняется, а вот сами рисунки на белом фоне иногда уменьшаются либо увеличиваются Задача определять что именно из перечисленного нарисовано и цвет этого рисунка. Работа на уровни пакетного режима не подходит, хочу сделать визуальное определения через снятия скриншота той области и определения рисунка по пикселям. В какую сторону копать... я совсем новичек в asm
мне не суть важно решить задачу, просто хочу совместить приятное с полезным, так как полным ходом изучаю Аsm и подвернулась интересная идея, вот и решил cделать свое изучения ещё более увлекательным да понимаю что на других языках это решается гораздо проще, но мне интересно на Asm Возможно кто то что нибудь подобное реализовывал интересно почитать, может есть какие нибудь lib ??
что то я поторопился прочитал плата и решил что это плата какая-то нужна и сразу закрыл Спасибо буду смотреть
На эту тему можно целую книгу написать. Можно оспорить многие положения OpenCV. Как вариант вполне имеет право на существование. Если не пихать понятия из высшей математики, а использовать предельные разумные приближения вполне можно реализовать нересурсоёмкие приложения работающие с десятком мегабайт памяти и 100 MHz процессором, то есть даже на сотовых телефонах; а на современных ПК в режиме реального времени с несколькими камерами. 1. Совет всё-таки попробовать написать программу именно на ассемблере. 2. Так как вы используете математические фигуры, она вам пригодится в рамках школьного курса. Стоит только вспомнить, что Окружность — геометрическое место точек, равноудаленных от центральной точки. И у вас всё получится.
я и так хочу писать именно на Asm вот только мне бы по больше примеров и статей как работать с пикселями различать цвета и т.д... Подкиньте какие нибудь материалы или идеи как подобное реализовать на Assembler буду благодарен google пока не дает результатов... не может же быть что это OpenCV единственное решение. У меня до этого был опыт только со скриптовыми языками Perl, php по этому я в WinApi слаб
не буду спорить, но, например, OpenCV можно использовать для проверки и отработки идеи, а потом уж если не устраивает быстродействие (которое, очень хорошее можете переписать свой алгоритм на асме а так - алгоритм поиска должен быть таким: 1. выделение контруров с помощью Кенни 2. поиск по контурам (или аналитически, как и советовал paralvic) или, например, с помощью преобразования Хафа
Ganzzter Можно придумать кучу вариантов распознавания. Вот и пиши как думаешь. Начни с простого к примеру повышения яркости изображения. Затем преобразование цветной картинки в оттенки серого. Затем по сложнее сделай фильтр выделения границ Собеля. Есть GpuCv. Все алгоритмы можно найти по отдельности в google. На java лучше всего ищется, просто добавляешь это слово при поиске. Еще можешь посмотреть библиотеку graphics32. Там половина на ассемблере написано. Сам лично пишу на Delphi аналог OpenCV.
Спасибо что откликнулись ну вот я думаю так снимаем скриншот, преобразуем в png формат избавляясь тем самым от оттенков и начиная с самого верхнего пикселя начинаем узнавать цвет каждого пикселя к примеру фон белый, двигаемся на искасок по каждому пикселю вниз проверяя цвет пока не натыкаемся на другой цвет и так с разных сторон картинки . вот что меня интересует как узнать цвет пикселя картинки с помощью asm ищу но нечего найти немогу??
Ganzzter png не подходит так как это сжатый формат. Надо работать DIB он же BitMap. Чтобы получить набор пикселей используй GetDIBits. Или же создай битмэп с примым доступом CreateDIBSection и копируй в него свои данные.
Не находишь потому что за это отвечает не ассемблер- набор команд ассемблера, а API - интерфейс для программирования приложений. В нашем случае API виндоуса или сторонней библиотеки.
Ясненько я привык к тому что у скриптовых языков Perl там на все есть свои модули, а у ASM нет видимо не каких специальных модулей, нужно просто ковырять библиотеки WinApi понял спасибо
Ganzzter, скачай шестнадцатеричный редактор http://www.wasm.ru/baixado.php?mode=tool&id=24 открой какой-нибудь небольшой BMP файл и попробуй поменять содержимое блоков, попереставлять его части. Любое решение будет делать то же самое.
извеняюсь немного не понял что это мне даст, ведь это получется билиберда как это мне поможет? ведь я незнаю что изменять картинка просто портится и все
Что бы знать, что менять надо изучить структуру файла .bmp. Изучив вы поймете, что кодирование изображения зависит от многих факторов, например наличие компрессии, палитры, глубины цвета и т.д. Вся эта информация содержится в заголовке файла. А и если вы не сильны в API, то изучив и поняв то, о чем я написал выше вы сами с легкостью(конечно если вы знаете асм) напишете функцию определения цвета пикселя. В асме есть все, только для этого нужна ваша фантазия!
для распознования картинок есть много программ - ABBY FineReader например (если быть точнее распознование текстов). на элементарном уровне проблема распознования картинок подымается USD http://www.dimonius.ru/?usd качалка которая каптчи распознает для ввода кодов. одна из сборок - USD от GYRA кажется так, использует для распознования стороннюю программку с командной строкой - CAP. на сайте этой программки есть инструкция как готовить шаблоны и такое прочее. почитай и с алгоритмом у тебя случится просветление. задача сама по себе не такая уж и сложная, как кажется, она решается простыи алгоритмами - естественно надежность рапознования не высокая, но у тебя стандарт картинок жесткий - так что просто будет. структура BMP файла простейшая - описана в инете неоднократно уже сто лет, даже для турбо бейсика есть подробное описание как нарисовать картинку на экране используя бмп шаблон. для упрощения задачи сборка GYRA+CAP использует сторонню программку с командной строкой которая конвертирует картинки разных форматов в формат который понимает CAP. уже не помню какую
крест на крест под 90 градусов две линии проведи (просканируй) каждая пересечется с фигурой два раза (точки НЕ ТОГО цвета). треугольник определился. и так далее....