2011-01-26 11 views
7

Necesito desarrollar una aplicación de escritorio que serálogotipo en pantalla de escritorio

1.) tener una lista de los diferentes logotipos de aplicación (fondo transparente), por ejemplo, IE, FIREFOX, CROMO, PHOTOSHOP ETC.

2.) El usuario tomará una captura de pantalla del escritorio y guardará la imagen.

3.) Ahora mi aplicación necesita buscar todos los logos en la imagen de captura de pantalla y decir qué todos los logos están presentes y dónde.

4.) Utilicé OPENCV, está funcionando, pero cuando el usuario cambia el fondo del escritorio & captura la captura de pantalla, no está funcionando ya que el área transparente del logotipo está obteniendo el contenido de fondo del escritorio.

¿Alguien puede proporcionar una solución o bibliotecas de código abierto, comercial para hacer este trabajo.

+2

Si simplemente está tratando de encontrar todos los programas en ejecución, buscar un logotipo en una captura de pantalla podría no ser el mejor enfoque ... – SWeko

+0

El requisito no es encontrar todos los programas en ejecución, sino encontrar si el icono de la aplicación x es presente en el escritorio o no, si es así en qué posición. – Hoshin

Respuesta

8

Esto es fácil de hacer mediante la correlación cruzada.

Ver mi respuesta a this question.

Básicamente:

  • imagen Comienzo de una plantilla de imagen de escritorio y para cada icono
  • Aplicar detección de bordes (por ejemplo Sobel) a las imágenes de imágenes de escritorio y de la plantilla con. la imagen original del escritorio y las plantillas
  • tirar, no se los necesita más causa que va a utilizar las imágenes de bordes detectados
  • Para cada plantilla
    • Do plantilla de juego como lo haría normalmente
    • Umbral el máximo del resultado. Si está por encima del umbral, tiene una coincidencia en esa posición. De lo contrario, no hay coincidencia.

Si los iconos están alineados en una cuadrícula en el escritorio, es posible que pueda para acelerar su procesamiento sólo la comprobación de las posiciones específicas de la red.

EDITAR

También puede ahorrar mucho tiempo conociendo qué iconos desea buscar. Si tiene acceso al sistema de archivos, simplemente busque los archivos *.lnk (o cualquier otra extensión que le pueda interesar) en el directorio que corresponde al escritorio (no recuerdo exactamente qué es, pero para Windows7 es algo así como c:\users\misha\desktop). Eso le dirá qué iconos hay en el escritorio.Esto le permitirá acortar la lista de candidatos de su plantilla antes de ir y hacer la coincidencia de la plantilla.

+0

El icono puede ser hueco en algunas áreas (por lo que no hay bordes en esa área), en este caso la imagen de borde de la imagen del escritorio (como fondo cambia) contendrá bordes adicionales, cómo la coincidencia de plantilla normal hará frente a esto . – Hoshin

+1

Cobrará muy bien, porque su plantilla también tendrá una parte hueca. Pruébalo por ti mismo. – misha

0

No estoy familiarizado con las herramientas que está utilizando, pero supongo que tiene que o bien:

a) Informe a su programa de hacer caso omiso de los píxeles transparentes en las imágenes de iconos durante la operación de comparación.

O

b) Informe a su programa para el tratamiento de los píxeles transparentes en las imágenes de iconos como "comodines", que pueden ser de cualquier color.

+0

Tienes razón. Pero estoy buscando algunos algoritmos para una rápida correspondencia de plantillas con las capacidades de la región. Si me escribo y verifico cada bloque de imagen, me tomará mucho tiempo. Opencv tarda alrededor de 10-20 ms para encontrar un logotipo en una imagen de escritorio. – Hoshin

2

Me gusta misha's answer y creo que debería funcionar para usted. Pero si eso no funciona, podría intentar reemplazar los píxeles transparentes en su logotipo de referencia con ruido aleatorio distribuido uniformemente antes de probar la coincidencia. Esto hará que los píxeles transparentes sean irrelevantes para cualquier cálculo coincidente porque coincidirán igual de mal independientemente de lo que haya en el escritorio en esos píxeles.

Cuestiones relacionadas