2017-10-08 7 views
0

Je fais de la reconnaissance d'image avec C# et AForge et j'obtiens peu de correspondances ce qui est super car il y a peu de choses identiques dans l'image. Mais comment en choisir un seul? Je dois changer en quelque sorte foreach(){} voici mon code:Comment choisir un de tous les matches? C# AForge

ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0.925f); 
// find all matchings with specified above similarity 
TemplateMatch[] matchings = tm.ProcessImage(sourceImage, template); 
// highlight found matchings 
BitmapData data = sourceImage.LockBits(
    new Rectangle(0, 0, sourceImage.Width, sourceImage.Height), 
    ImageLockMode.ReadWrite, sourceImage.PixelFormat); 
foreach (TemplateMatch m in matchings) // <-----how to change this to select only one random thing? 
{ 
    Drawing.Rectangle(data, m.Rectangle, Color.White); 
    // do something else with matching 
} 
sourceImage.UnlockBits(data); 

Répondre

0

Puisque vous avez affaire à un tableau concret de matches, et non un linq dénombrable qui peut déclencher une évaluation de longue haleine, il semble que vous besoin de quelque chose le long de ces lignes :

Random rnd = new Random(); 
var rndPick = matches[rnd.Next(matches.Length)]; 

Exemple - une LINQPad ciselée

string[] matches = new string[] {"A","B","C","D","E","F","G"}; 

Random rnd = new Random(); 

for (int i=0; i<10; i++) 
    matches[rnd.Next(matches.Length)].Dump(); 

non LINQPad, il suffit d'écrire l'élément sélectionné à la console

for (int i=0; i<10; i++) 
     Console.Writeline(matches[rnd.Next(matches.Length)]); 
+0

Je suis en train d'utiliser votre exemple, mais je suis nouveau à la programmation ce que 'Dump()'? – greyb3ast

+0

[LinqPad] (https://www.linqpad.net/) est un outil C# sympa. 'Dump' est une méthode d'extension qui émet le contenu de l'élément LHS sur la console. Vous pouvez aussi écrire directement la réponse à la console (exemple mis à jour) –