2014-09-05 50 views
0

我試圖比較兩個位圖中矩形的相等性。我正在使用AForge庫。一個是模板,另一個是表單。我試過這個,但對我來說似乎很粗糙,因爲它有太多的迭代,這使得程序非常慢。它可以工作,但問題是程序因迭代過多而掛起。請問我錯過了什麼?我在正確的軌道上或什麼?請幫助和原諒我的原始代碼如下。 位圖位圖=新位圖(pictureBox1.Image); 位圖bitmap2 =新位圖(pictureBox2.Image);比較模板和表單c的相等性#

 // create an instance of blob counter algorithm 
     BlobCounter blobCounter = new BlobCounter(); 
     blobCounter.MinWidth = 5; 
     blobCounter.MinHeight = 5; 
     blobCounter.FilterBlobs = true; 
     blobCounter.ObjectsOrder = ObjectsOrder.Size; 
     blobCounter.ProcessImage(bitmap); 
     BlobCounter blobCounter2 = new BlobCounter(); 
     blobCounter2.MinWidth = 5; 
     blobCounter2.MinHeight = 5; 
     blobCounter2.FilterBlobs = true; 
     blobCounter2.ObjectsOrder = ObjectsOrder.Size; 
     blobCounter2.ProcessImage(bitmap2); 


     Rectangle[] rects = blobCounter.GetObjectsRectangles(); 

      Rectangle[] rects2 = blobCounter2.GetObjectsRectangles(); 

     foreach (Rectangle recs in rects)  
     foreach (Rectangle recs2 in rects2) 

      if (rects.Length > 0) 
      { 
       if (rects2.Length > 0) 
       { 
        for (int x = 0; x < recs.Width & x < recs.Height; x++) 
        { 
         // for (int x2 = 0; x2 < recs2.Width; x2++) 
         for (int y = 0; y < recs2.Width & y < recs2.Height; y++) 
         { 
          // for (int y2 = 0; y2 < recs2.Height; y2++) 

          if (recs.Equals(recs2)) 
          { 
           this.Refresh(); 
           //listBox1.Items.Add("TRUE"); 
           Console.WriteLine("TRUE"); 



          } 
          else 
          { 
           //listBox1.Items.Add("FALSE"); 
           Console.WriteLine("FALSE"); 
          }..... 

回答

0

在AForge.Net,你可以嘗試從一個圖像(位圖)挑的矩形,並嘗試使用TemplateMathcing方法bitmap2找到類似的矩形。這可能會更快。