2012-02-25 14 views
4

これをもっと速くするにはどうしたらいいですか?ここではsourceImageのサイズは1024x768、テンプレートのサイズは50x50です。これは、他のより速く簡単な方法を誰かが知っていれば提出してください。 私がやろうとしているのは、スクリーンショット内で小さな画像を見つけることです。そして、私の限界は1秒です。私が探している画像は赤い長方形の単純な画像で、スクリーンショットはより複雑です。別の大きな画像の中で小さい画像を見つけて速く

System.Drawing.Bitmap sourceImage = (Bitmap)Bitmap.FromFile(@"C:\SavedBMPs\1.jpg"); 
System.Drawing.Bitmap template = (Bitmap)Bitmap.FromFile(@"C:\SavedBMPs\2.jpg"); 
// create template matching algorithm's instance 
// (set similarity threshold to 92.5%) 

ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching(0.921f); 
// find all matchings with specified above similarity 

TemplateMatch[] matchings = tm.ProcessImage(sourceImage, template); 
// highlight found matchings 

BitmapData data = sourceImage.LockBits(
    new Rectangle(0, 0, sourceImage.Width, sourceImage.Height), 
    ImageLockMode.ReadWrite, sourceImage.PixelFormat); 
foreach (TemplateMatch m in matchings) 
{ 

     Drawing.Rectangle(data, m.Rectangle, Color.White); 

    MessageBox.Show(m.Rectangle.Location.ToString()); 
    // do something else with matching 
} 
sourceImage.UnlockBits(data); 
+0

いくつかのexaplesを投稿できますか? – BlackBear

+0

画像の例ですか? –

+0

画像例はできません:私はそれを行うには10以上の評判が必要だと言います。私は今のところわずか4つしか持っていません –

答えて

2

http://opencv.willowgarage.com/wiki/FastMatchTemplate - ここにあなたが最初にダウンサンプリング画像に一致するようにしようと、2つのステップを用いたテンプレートマッチングをスピードアップするための興味深いアイデアを見つけることができます一致を見つけたときに小さい探索領域でオリジナルのもの。

また、matchTemplate関数でのテンプレートマッチングのopencv実装もあります。この機能はGPUに移植され、大幅なスピードアップが可能です。 matchTemplate機能 -

は、以下の

http://opencv.willowgarage.com/documentation/cpp/object_detection.htmlを参照してください。 http://opencv.willowgarage.com/wiki/OpenCV_GPU - GPUに移植されたOpenCV機能について

+0

Gpuでサーバーに問題が発生している可能性があります。あなたが正しいです、とにかく、最初のリンクからのダウンサンプリングでのトリックは、GPUの実装なしに十分なスピードを上げることができます。 – TomTom

+1

)重いもの....私はイメージとより多くのアイデアを得る必要がありますありがとう、それを感謝します。私はそれが今働くかどうかわからないが、私はこれをチェックさせ、それが一致すれば私はあなたの答えを投票するでしょう。あまりにも長くかかることはないと思う。 –

+0

@MichaelKupchick Wow .........これは、サーバーをホストしており、GPUにアクセスできるVPSはほとんどありません(悲しげに。 –

関連する問題