2016-04-04 8 views
0

現在、私はemguCVと共にvisual studio 2013 C#を使用して指紋認識を行っています。私はすでにmsアクセスとそれにグレイサクルで画像を追加できるプログラムを使ってデータベースを持っています。2つのimageBoxコントロール(EmguCV)の一致

  • 私は2 imageBox(imageBox0、imageBox1、imageBox2)を持っている.. imageBox0は私のカメラのライブストリーミングを表示します。、imageBox1はimageBox0の処理された画像(私の手の輪郭、グレースケール、四角形)を表示し、 imageBox2は、msアクセスデータベースから選択したイメージを表示します。

    :私は必要なもの

は(データベース内の全画像に)imageBox2に似ているかimageBox1から画像を認識するための方法

ここ

私がやっているもののスナップショットですですenter image description here

私はthougてきたEmguCVバージョン2

private Image GetImgFromDB() 
{ 
    if (rowNumber >= 0) 
    { 
     byte[] FetchedImgBytes = (byte[])LocalDataTable.Rows[rowNumber]["alphaImage"]; 
     MemoryStream stream = new MemoryStream(FetchedImgBytes); 
     FetchedImg = Image.FromStream(stream); 
     txtAlphaName.Text = (string)LocalDataTable.Rows[rowNumber]["AlphaName"]; 

     Bitmap FetchedImgCV = (Bitmap)FetchedImg; 
     normalizedMasterImage = new Image<Gray, Byte>(FetchedImgCV); 

     return FetchedImg; 
    } 
    else 
    { 
     MessageBox.Show("There are no images in the dataase yet. add some Please"); 
     //return null; 
    } 
    return null; 
} ` 

答えて

1

を使用していますこれは静かで成功の程度です。鉱山では2つの画像を比較し、その差を2に設定してアラートを発生させます。

キーが

class bitmapCompare 
{ 
    public enum CompareResult 
    { 
     ciCompareOk, 
     ciPixelMismatch, 
     ciSizeMismatch 
    }; 

    public static CompareResult Compare(bool useHash, Bitmap bmp1, Bitmap bmp2, out double err, out Bitmap diff) 
    { 
     CompareResult cr = CompareResult.ciCompareOk; 
     int er = 0; 
     err = 0; 
     diff = new Bitmap(bmp1.Width, bmp1.Height); 
     //Test to see if we have the same size of image 

     if (bmp1.Size != bmp2.Size) 
     { 
      cr = CompareResult.ciSizeMismatch; 
      err = 100; 
     } 
     else 
     { 
      //Convert each image to a byte array 

      System.Drawing.ImageConverter ic = 
        new System.Drawing.ImageConverter(); 
      byte[] btImage1 = new byte[1]; 
      btImage1 = (byte[])ic.ConvertTo(bmp1, btImage1.GetType()); 
      byte[] btImage2 = new byte[1]; 
      btImage2 = (byte[])ic.ConvertTo(bmp2, btImage2.GetType()); 

      //Compute a hash for each image 

      SHA256Managed shaM = new SHA256Managed(); 
      byte[] hash1 = shaM.ComputeHash(btImage1); 
      byte[] hash2 = shaM.ComputeHash(btImage2); 

      //Compare the hash values 
      if (useHash) 
      { 
       for (int i = 0; i < hash1.Length && i < hash2.Length; i++) 
       { 
        if (hash1[i] != hash2[i]) 
        { 
         er++; 
         cr = CompareResult.ciPixelMismatch; 
        } 
       } 

      } 
      else 
      { 
       int totalPixels = 0; 
       er = 0; 
       for (int x = 0; x < bmp1.Width; x++) 
       { 
        for (int y = 0; y < bmp1.Height; y++) 
        { 
         totalPixels++; 
         if (bmp1.GetPixel(x, y) != bmp2.GetPixel(x, y)) 
         { 


          diff.SetPixel(x, y, Color.Black); 
          er++; 
          cr = CompareResult.ciPixelMismatch; 
         } 
         else 
          diff.SetPixel(x, y, Color.White); 
        } 
       } 
       System.Diagnostics.Debug.WriteLine("Total pixels:{0}", totalPixels); 
       System.Diagnostics.Debug.WriteLine("Diff pixels:{0}", er); 

       if (er > 0) 
        err = (double)er/((double)bmp1.Height * (double)bmp1.Width); 
       else 
        err = 0; 
       if (err > 0) err = Math.Round(err*100, 1); 
       if (err > 100) err = 100; 


      } 
     } 
     return cr; 
    } 

を変更すること自由に感じ...ない生データ、ハッシュを比較することで、これが唯一のPOC、何も生産しました。

+0

私はそれを見ますよ、おかげでたくさん。 私は何かを見つけて仕事を終えることができたらいいと思っています。 –

+0

実際には、コードを表示した後、ハッシュはあなたに速い「合っていますか?非ハッシュは比較され、異なる領域を強調表示する比較ビットマップを生成します。 私はこれを使ってSeleniumの画面ダンプを比較し、偽陽性を減らしました。問題があり、私にpingしてください。 – MiloTheGreat

+0

仲間、あなたは私が(どのように私はimageBox1とimageBox2を比較するためにそれを使用する)鉱山で、あなたのコードを利用することになるか、私を助けてくださいすることができます.. も、この1と私の理解は正しいのでしょうか?... 'SHA256Managed shaM = new SHA256Managed(); //メインプログラムの名前空間? バイト[] hash1 = shaM.ComputeHash(btImage1); // btImage1 = imageBox1の名前(emguCV) byte [] hash2 = shaM.ComputeHash(btImage2); // btImage2 = imageBox(emguCV)の名前 ' もう一度感謝... –

関連する問題