![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
当方C#にて画像の解析を試みておりますが、行き詰ってしまったので
ご質問させてください。
解析と言ってもそこまで大袈裟な物ではなく、画像A.bmp(640×460)と
画像Aから切り出した画像B.bmp(100×50)を用意して、画像Bは
画像Aに出現するかどうかを検索するだけのものです。
(上記の場合、確実に画像Aに画像Bは出現します)
色々調べてみたところ、画像をハッシュに変換して、ハッシュ値から
調べる様な物を見つけたのですが、画像A・画像BをMD5にて16桁の
ハッシュ値を算出してからの検索方法がわかりません。
そもそも、この方法が正しいのかも??
どなたかご存知の方いましたらご教授くださいませ。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんばんは。
出来ますが、色彩を集める際にGetPixel()を使用すると重たくなりすぎますので、以下のクラスを使用する必要があります。
http://msdn.microsoft.com/ja-jp/library/system.d …
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 様
直接コードまでいただき大変おどろいております。
ちょっと難しい印象を受けましたが、一つ一つ噛み砕いて
理解していきたいと思っております。
大変、参考になる資料ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iPhone(アイフォーン) スマホでgoogleでの画像検索で大きな写真だけを探したい。 4 2023/06/02 14:13
- その他(コンピューター・テクノロジー) Mind masterで挿入した画像を縦向きにしたい 1 2023/03/02 08:44
- Safari(サファリ) ポッカキット(海外のグロいのを取り扱ってるサイト)を興味本位で調べてしまいました。まだサイトには入っ 1 2022/08/17 20:27
- その他(法律) Pinterestにある画像を利用・引用して絵を描きたいのですが、これは著作権に違反しませんか? 1 2022/07/11 04:42
- Yahoo!メール Aliexpressから送られてくる画像メールの画像が表示されない 1 2022/05/30 09:10
- Google+ 画像にうつってる人が誰か検索できる方法はありますか? Googleの画像検索を使うと、その人が来てい 2 2022/12/12 20:37
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- YouTube youtube 画像のサイズを少し小さくするには 1 2023/02/14 08:55
- 電子書籍 漫画村って画像検索エンジンな訳ですよね?漫画村が違法ならGoogle画像検索も違法じゃないんですか? 4 2023/03/13 17:42
- YouTube ユーチューブへの動画投稿にサムネイルを付ける方法は? 1 2022/07/21 23:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
背景画像の繰り返しについて
-
画像をループさせるうまい方法...
-
【EXCEL VBA】ダブルクリックで...
-
スマホでサイトの画像を長押し→...
-
日本の白地図の画像に、都道府...
-
UWSC 画像判定と条件分岐について
-
サムネイル画像と表示される画...
-
ExcelのVBAで教えてほしいです。
-
VBAのユーザーフォームのイメー...
-
ヒストグラム類似度による画像...
-
VBA シート毎に画像挿入
-
自分のfc2ブログの記事の本文内...
-
gif 画像上の ボタンに リン...
-
vb.net 画像の透過について
-
C#のForm内に複数画像を繰り返...
-
モーダルウィンドウ内で複数の...
-
画像を表示するには
-
jqueryスライダーを2段でスライ...
-
UWSC「画像が無い場合」
-
Excel ユーザーフォームで表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【EXCEL VBA】ダブルクリックで...
-
背景画像の繰り返しについて
-
EXCEL VBA 複数のImageコントロ...
-
「using Windows」でエラーが出る
-
jqueryスライダーを2段でスライ...
-
画像のピクセルデータの取得
-
ImageMagickでgif画像の一部が...
-
Excel ユーザーフォームで表示...
-
uwcs のマクロで画像認識をして...
-
uwscの画像認識に失敗します。
-
vb.net 画像の透過について
-
VBA シート毎に画像挿入
-
UWSC 画像判定と条件分岐について
-
UWSC「画像が無い場合」
-
gif 画像上の ボタンに リン...
-
Pythonでgif画像が上手く作れない
-
VBAのユーザーフォームのイメー...
-
UWSC 画像認識で条件分岐
-
パネルに画像
-
【WPF】画像の切り替え
おすすめ情報