- ベストアンサー
画像検索の方法について
- C#を使用して画像の解析を試みていますが、行き詰まっています。
- 画像をハッシュに変換して、ハッシュ値から検索する方法がわかりません。
- どなたかご存知の方がいらっしゃいましたら、ご教授いただけませんか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 出来ますが、色彩を集める際にGetPixel()を使用すると重たくなりすぎますので、以下のクラスを使用する必要があります。 http://msdn.microsoft.com/ja-jp/library/system.drawing.imaging.bitmapdata(VS.100).aspx MD5クラスの使用法 http://dobon.net/vb/dotnet/string/md5.html dest.bmpに640x480を、source.bmpに100x50を指定してみてください。 改善の余地もあるかとは思いますが、以下参考程度に。 private byte[] MakeMD5From(Bitmap from) { System.Drawing.Imaging.BitmapData bmData = from.LockBits(new Rectangle(0, 0, from.Width, from.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb); byte[] images = new byte[bmData.Stride * bmData.Height]; System.Runtime.InteropServices.Marshal.Copy(bmData.Scan0, images, 0, images.Length); from.UnlockBits(bmData); System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); return md5.ComputeHash(images); } private bool CompareMD5(byte[] a, byte[] b) { for (int i = 0; i < a.Length; ++i) { if (a[i] != b[i]) return false; } return true; } private void button1_Click(object sender, EventArgs e) { Bitmap bmDest = new Bitmap("dest.bmp"); Bitmap bmSource = new Bitmap("source.bmp"); Bitmap bmWork = new Bitmap(bmSource.Width, bmSource.Height); Rectangle rc = new Rectangle(0, 0, bmSource.Width, bmSource.Height); byte[] md5src = this.MakeMD5From(bmSource); for (int y = 0; y < bmDest.Height - bmSource.Height; ++y) { for (int x = 0; x < bmDest.Width - bmSource.Width; ++x) { Graphics gfx = Graphics.FromImage(bmWork); gfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; gfx.DrawImage(bmDest, rc, new Rectangle(x, y, bmSource.Width, bmSource.Height), GraphicsUnit.Pixel); gfx.Dispose(); byte[] md5dest = this.MakeMD5From(bmWork); if (this.CompareMD5(md5dest, md5src) == false) continue; MessageBox.Show("発見", "[x = " + x.ToString() + "][y = " + y.ToString() + "]"); return; } } }
お礼
machongola 様 直接コードまでいただき大変おどろいております。 ちょっと難しい印象を受けましたが、一つ一つ噛み砕いて 理解していきたいと思っております。 大変、参考になる資料ありがとうございました。