2013-12-11 101 views
0

爲了好玩,我試着做這個工作: 如果我離開PC,它應該在幾秒鐘後鎖定它。兩張圖片看起來幾乎完全相同

所以我正在初始化一個計時器並每3秒拍一張照片。我計算Hashvalue並將其與舊圖片進行比較。這裏是我的測試代碼:

Timer _timer; 
WebCam _webCam; 
Bitmap _bitmap; 

public CameraChecker() 
{ 
    _webCam = new WebCam(); 
    _webCam.Connect(); 
    _timer = new Timer(TimerCb, null, 0, 3000); 
} 

private void TimerCb(Object stateInfo) 
{ 
    _webCam.Update(); 
    Bitmap newBitmap = _webCam.CalcBitmap(); 
    if (_bitmap == null) 
     _bitmap = newBitmap; 
    else 
    { 
     ImageConverter conv = new ImageConverter(); 
     byte[] bytesNew = (byte[])conv.ConvertTo(newBitmap, typeof(byte[])); 
     byte[] bytesOld = (byte[])conv.ConvertTo(_bitmap, typeof(byte[])); 

     //IStructuralEquatable eqa1 = bytesNew; 
     //bool eq = eqa1.Equals(bytesOld, StructuralComparisons.StructuralEqualityComparer); 

     //Compute a hash for each image 
     SHA256Managed shaM = new SHA256Managed(); 
     byte[] hash1 = shaM.ComputeHash(bytesNew); 
     byte[] hash2 = shaM.ComputeHash(bytesOld); 

     //Compare the hash values 
     bool eq = true; 
     for (int i = 0; i < hash1.Length && i < hash2.Length; i++) 
     { 
      if (hash1[i] != hash2[i]) 
      { 
       eq = false; 
       break; 
      } 
     } 

     if (eq) 
     { 
      System.Diagnostics.Debugger.Break(); 
     } 
     else 
     { 
      _bitmap = newBitmap; 
     } 
    } 
} 

我正在使用MetriCam SDK來拍照,這似乎工作得很好。
我的問題:它從來沒有發生,兩個圖片具有完全相同的值。即使我嘗試變暗相機,它似乎也不起作用。

正如你所看到的,我嘗試使用StructuralEquatable,但它沒有工作。

我的測試項目是徒勞的嗎?

像往常一樣,感謝您的任何建議或提示!

+0

http://en.wikipedia.org/wiki/Entropy –

+0

如果您使用太陽作爲光源,它會移動;即圖片是不同的。 –

+0

這種情況類似於浮點計算,因爲我們不檢查兩個數之間的相等性,只是差值低於某個閾值。 –

回答

3

你讓兩個激動人心的照片可能是零的機會。唯一的另一種可能性是散列碰撞,這個接近零。所以你的代碼工作完美。計算哈希不是解決您的問題的方法。

相關問題