Template matching et reconnaissance d'objets avec opencv (emgu cv)

Soyez le premier à donner votre avis sur cette source.

Vue 19 453 fois - Téléchargée 2 068 fois

Description

Bonjour
Ce petit source illustre l'utilisation de la bibliothèque Emgu CV pour la reconnaissance des objets au sein d'une image.
Emgu CV est un Wrapper de la biblio OpenCV pour les développeurs .NET, vous pouvez visiter le site officiel du projet ici www.emgu.com
L'application permet de charger une image master qui sera analysée pour rechercher les objets voulu. ces objets sont des images qui doivent être charger dans l'application aussi.
Les étapes du traitement sont :
1. Normalisation de l'image master => vers les niveaux de gris.
2. Normalisation de l'image de l'objet => vers les niveaux de gris
3. Effectuer une opération de template matching dans l'image master. le résultat retourné sera deux vecteurs
a . Vecteur max : contient les points d'origine des segments qui ressemblent le plus à l'objet recherché.
b . Vecteur min : contient les points d'origine des segments qui ne ressemblent pas à l'objet recherché.
Vous pouvez aussi analyser le niveau de similitude entre les segments trouvés et l'image originale de l'objet.

Le code source est bien commenté.
vous trouverez dans le dossier Bin quelques images des objets du ruban Office 2007 pour les tests
Notes :
- vous devez télécharger la biblio Emgu CV, l'installer et puis copier les biblio DLL vers le bin de ce source (Copier le contenu du dossier C:\Program Files\emgucv 2.X.Y.Z\bin) ou X, Y Z sont les composant de la version de la bibilio.
amples informations sur ce lien : http://www.emgu.com/wiki/index.php/Download_And_Installation
- Le code source C# doit être compiler sous la configuration x86.

Source / Exemple :


// Convertimg the master image to a bitmap
            Bitmap masterImage = (Bitmap) pbxMaster.Image;

            // Normalazing it to the grayscal mode
            Image<Gray, Byte> normalizedMasterImage = new Image<Gray, Byte>(masterImage);

            // Searching for the sample pictures in the master image
            foreach (var objectImage in imagesList1.Images)
            {
                // Searching for this image in the master image
                Image<Gray, Byte> normalizedObjectImage = new Image<Gray, Byte>((Bitmap)objectImage);
                // Contains informations about positions.
                Image<Gray, float> result = normalizedMasterImage.MatchTemplate(normalizedObjectImage, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCORR_NORMED);
                
                // Minimum accuracy found, maximum accuracy found (1 is the best (Complete Matching))
                double[] min, max;
                Point[] minLocations, maxLocations;
                result.MinMax(out min, out max, out minLocations, out maxLocations);

                ImageLocations sampleLocations = new ImageLocations();
                sampleLocations.Image = objectImage;
                sampleLocations.Locations = new List<Point>();
                
                // Get the region of the master picture that does not match to the template at all.
                //sampleLocations.Locations.AddRange(minLocations);
                // Get the regions of the master picture that match our sample.
                sampleLocations.Locations.AddRange(maxLocations);

                // Drawing a rectangle on it
                DrawRectangleOnMaster(sampleLocations);
                CustomLocation = sampleLocations;
                GlobalSampleLocations.Add(sampleLocations);
            }

// Voir le zip

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Une exception non gérée du type 'System.TypeInitializationException' s'est produite dans Emgu.CV.dll

Informations supplémentaires : Une exception a été levée par l'initialiseur de type pour 'Emgu.CV.CvInvoke'.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.