4

とにかく、このことをより速くするために?今のところ、sourceImage のサイズは 1024x768、テンプレートは 50x50 で 6 秒くらいです。これは AForge を使用しています。他のより速くて簡単な方法を知っている人は、提出してください。私がやろうとしているタスクは、スクリーンショット内の小さな画像を見つけることです。そして、できれば速い私の限界は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);
4

1 に答える 1

2

http://opencv.willowgarage.com/wiki/FastMatchTemplate - ここでは、2 つのステップを使用してテンプレート マッチングを高速化するための興味深いアイデアを見つけることができます。最初にダウンサンプリングされた画像との一致を試み、見つかった場合は元の画像と一致する検索領域を小さくします。

また、matchTemplate 関数にテンプレート マッチングの opencv 実装があります。この関数は GPU に移植されており、大幅な高速化が可能です。

以下を参照してください

http://opencv.willowgarage.com/documentation/cpp/object_detection.html - matchTemplate 関数。 http://opencv.willowgarage.com/wiki/OpenCV_GPU - GPU に移植された OpenCV 機能について。

于 2012-02-27T10:15:26.700 に答える