两张照片看起来几乎相同

时间:2013-12-11 19:51:49

标签: c# image

为了好玩,我正努力做到这一点: 如果我离开电脑,它会在几秒钟后锁定它。

所以我正在初始化一个Timer并每隔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,但它也没有用。

我的测试项目是徒劳的吗?

像往常一样,感谢任何建议或提示!

1 个答案:

答案 0 :(得分:3)

你制作两张相同照片的机会可能为零。唯一的另一种可能性是哈希冲突,这个alsof接近零。所以你的代码工作得很好。计算哈希值不是解决问题的方法。