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,但它沒有工作。
我的測試項目是徒勞的嗎?
像往常一樣,感謝您的任何建議或提示!
http://en.wikipedia.org/wiki/Entropy –
如果您使用太陽作爲光源,它會移動;即圖片是不同的。 –
這種情況類似於浮點計算,因爲我們不檢查兩個數之間的相等性,只是差值低於某個閾值。 –