2017-10-08 136 views
0

我正在用c#和AForge進行圖像識別,我得到了很少的匹配,這是偉大的,因爲在圖片中幾乎沒有相同的東西。但我該如何選擇其中的一個呢?我需要以某種方式改變foreach(){}這裏是我的代碼:如何從所有比賽中選擇一個? 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); 

回答

0

既然你正在處理比賽的具體陣列,而不是一個linq可能會引發一些囉嗦評價枚舉,看來你需要的東西沿着這些路線:

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

示例 - 一個linqpad剪斷

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(); 

非LinqPad,只寫所選項目到控制檯

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

我想用你的例子,但我是新來的編程那是什麼'轉儲()'? – greyb3ast

+0

[LinqPad](https://www.linqpad.net/)是一個不錯的C#工具。 「轉儲」是一種擴展方法,可將LHS項目的內容發送到控制檯。您可以直接將答案寫入控制檯(更新示例) –

相關問題