Найти логотип на скриншоте рабочего стола - PullRequest
7 голосов
/ 26 января 2011

Мне нужно разработать настольное приложение, которое будет

1.) Иметь список логотипов различных приложений (прозрачный фон), например, IE, FIREFOX, CHROME, PHOTOSHOP ETC.

2.) Пользователь сделает скриншот рабочего стола и сохранит изображение.

3.) Теперь моему приложению необходимо найти все логотипы на снимке экрана и указать, какие логотипы присутствуют и где.

4.) Я использовал OPENCV, он работает, но когдапользователь меняет фон рабочего стола и делает снимок экрана, он не работает, поскольку прозрачная область логотипа получает фоновый контент рабочего стола.

Может ли кто-нибудь предоставить решение или библиотеки с открытым исходным кодом, коммерческие для выполнения этой работы.

Ответы [ 3 ]

8 голосов
/ 26 января 2011

Это легко сделать с помощью взаимной корреляции.

Смотрите мой ответ на этот вопрос .

В основном:

  • Начните с изображения на рабочем столе и одного шаблона для каждой иконки
  • Применение функции обнаружения краев (например, Sobel) к изображению на рабочем столе и шаблонам изображений.
  • Выбросьте исходное изображение рабочего стола и шаблоны, они вам больше не понадобятся, потому что мы будем использовать изображения, обнаруженные по краям
  • Для каждого шаблона
    • Выполните сопоставление с шаблоном, как обычно
    • Порог максимума результата. Если это выше порога, у вас есть совпадение в этой позиции. В противном случае, нет совпадения.

Если ваши значки выровнены в сетке на рабочем столе, вы можете ускорить обработку, проверяя только эти конкретные позиции сетки.

EDIT

Вы также можете сэкономить много времени, зная, какие значки искать. Если у вас есть доступ к файловой системе, просто найдите файлы *.lnk (или любые другие расширения, которые могут вас заинтересовать) в каталоге, соответствующем рабочему столу (не могу точно вспомнить, что это такое, но для Windows7 это что-то вроде c:\users\misha\desktop). Это скажет вам , какие значки есть на рабочем столе. Это позволит вам сократить список кандидатов на шаблон до того, как вы приступите к сопоставлению шаблона.

2 голосов
/ 26 января 2011

Мне нравится ответ Миши , и я думаю, что это должно сработать для вас.Но если это не сработает, вы можете попробовать заменить прозрачные пиксели в вашем эталонном логотипе равномерно распределенным случайным шумом, прежде чем пытаться сопоставить.Это сделает прозрачные пиксели неуместными для любых подходящих вычислений, потому что они будут совпадать так же плохо, независимо от того, что находится на рабочем столе в этих пикселях.

0 голосов
/ 26 января 2011

Я не знаком с инструментами, которые вы используете, но я предполагаю, что вы должны либо:

a) Сказать вашей программе игнорировать прозрачные пиксели в изображениях пиктограмм во время операции сравнения.

ИЛИ

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

...