Comment trouver une image à l'intérieur d'un autre?
J'ai 2 images au format bmp.
ImageA est une capture d'écran (exemple)
ImageB est un sous-ensemble de. Disons, par exemple, une icône.
Je veux trouver les coordonnées X,Y de ImageB dans ImageA (si elle existe).
Une idée de comment je pourrais faire?
- Pouvez-vous poster les deux images BMP ici?
Vous devez vous connecter pour publier un commentaire.
Si les réponses aux deux premières questions sont Pas et Oui, alors vous avez un problème simple. Il permet également de savoir la réponse à T3.
Mise à jour:
L'idée de base est la suivante: au lieu de l'associer une fenêtre autour de chaque pixel dans imageB à chaque pixel de imageA et de la vérification de la corrélation, nous allons identifier les points d'intérêt (ou caractéristiques) sur les deux images qui seront suivi. Donc, il semble que les coins sont vraiment faciles à suivre depuis la zone autour d'elle est un peu similaire (pas dans les détails) - donc, nous allons trouver quelques vraiment forte coins dans les deux images et de recherche pour les coins qui ressemblent le plus.
Cela réduit le problème de la recherche de chaque pixel en B avec Un à la recherche pour, disons, 500 angles en B avec un 1000 coins dans Un (ou quelque chose comme ça) - beaucoup plus rapide.
Et de l'extraordinaire, c'est que vous avez plusieurs de ces coin des détecteurs de à votre disposition dans OpenCV. Si vous ne vous sentez pas à l'aide de emguCV (C# varriant), puis utilisez le RAPIDE détecteur de trouver les coins et ainsi de localiser plusieurs fonctions entre vos images. Une fois que vous avez cela, vous pouvez trouver l'emplacement du coin supérieur gauche de l'image.
imageB
va être que les petites?Voici un petit échantillon, mais il est lent prendre environ 4 à 6 secondes, mais c'est exactement ce que vous cherchez et je sais que ce post est vieux, mais si quelqu'un d'autre la visite de ce post récemment
vous pouvez regarder ce truc
vous avez besoin d' .NET AForge espace de noms ou de cadre de google et l'installer
inclure AForge nom de l'espace dans votre projet et c'est tout
il trouve le pictiure avec l'autre et donne les coordonnées.
Si l'image B est un exacte sous-ensemble de l'image (ce qui signifie que les valeurs des pixels sont exactement les mêmes), ce n'est pas un problème de traitement d'image, c'est juste de la correspondance de chaîne en 2D. Dans 99% des cas, la prise d'un formulaire en ligne au moyen de B et de confrontation avec chaque ligne de faire ce que vous souhaitez, et super rapide &mdhas; je suppose que C# a une fonction pour cela. Après que vous obtenez vos matchs (normalement, un peu), il suffit de vérifier l'ensemble de la B contre la partie appropriée de A.
Le seul problème que je vois c'est que dans certains cas, vous pouvez obtenir trop de matches. E. g. si Un de votre ordinateur de bureau, B est une icône, et vous avez la malchance de choisir une ligne dans le B composé de fond seulement. Ce problème est facile à résoudre (c'est à vous de choisir les lignes de B un peu plus de soin), mais cela dépend de la nature de votre problème.
Trouver des sous-images dans une image
Trouver une image dans une Image
Vérifier si une image existe dans une autre image