-3

私はにある画像を持っています

C:\ImageOne.png

そして、ディレクトリに20枚の画像があるとしましょう

C:\Images

ImageOne.png をこれらすべての画像と比較するにはどうすればよいですか?

例:

C:\ImageOne.png として保存された 1 つの reCaptcha 画像を取得したと想像してください。

C:\Images にあるフォルダーには、他の reCaptcha 画像があります。

次に、C:\Images 内で同一の画像を見つけることができるコードが必要です

現在のコード:

public static bool ImageCompareString(Bitmap firstImage, Bitmap secondImage)
{
    MemoryStream ms = new MemoryStream();
    firstImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    String firstBitmap = Convert.ToBase64String(ms.ToArray());
    ms.Position = 0;

    secondImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    String secondBitmap = Convert.ToBase64String(ms.ToArray());

    if (firstBitmap.Equals(secondBitmap))
    {
        return true;
    }
    else
    {
        return false;
    }
}

Bitmap img2 = new Bitmap(@"C:\ImageOne");

private void CheckCaptcha()
{
    foreach (string s in Directory.GetFiles(@"C:\Images"))
    {
        Bitmap img1 = new Bitmap(s);

        if (ImageCompareString(img1, img2) == true)
        {
            Logging("Identical");
        }
        else
        {
            Logging("Not Identical");
        }
        img1.Dispose();
    }
}
4

1 に答える 1

0

たぶんこれが役立ちます:

Bitmap img2 = new Bitmap(@"C:\ImageOne.png");
ImageConverter converter = new ImageConverter();
byte[] img2Bytes = (byte[])converter.ConvertTo(img2, typeof(byte[]));

foreach (string s in Directory.GetFiles(@"C:\Images"))
{
    Bitmap img1 = new Bitmap(s);
    byte[] img1Bytes = (byte[])converter.ConvertTo(img1, typeof(byte[]));
    if (CompareImages(img1Bytes,img2Bytes))
    {
        Logging("Identical");
    }
    else
    {
        Logging("Not Identical");
    }
    img1.Dispose();
}

public bool CompareImages(byte[] b1, byte[] b2)
{
   EqualityComparer<byte> comparer = EqualityComparer<byte>.Default;
   if (b1.Length == b2.Length)
   {
       for (int i = 0; i < b1.Length; i++)
       {
           if (!comparer.Equals(b1[i], b2[i])) return false;
       }
    } else { return false; }

     return true;
}
于 2013-12-28T22:14:50.460 に答える