如何在较小的图像中查找图像

时间:2019-03-06 18:51:26

标签: c# image-processing emgucv

使用emgucv c#...

我想找到另一个图像内部的对象的图像。

要测试代码,我会在原始图像中裁剪要查找的图像,并将其另存为Template.jpg。

然后,我使用此例程在原始图像中找到模板图像:

private Point Detect_object(
    Image<Gray, Byte> Area_Image,
    Image<Gray, Byte> image_object )
{
    //Work out padding array size
    Point dftSize = new Point( Area_Image.Width + ( image_object.Width * 2 ), Area_Image.Height + ( image_object.Height * 2 ) );
    //Pad the Array with zeros
    using ( var pad_array = new Image<Gray, Byte>( dftSize.X, dftSize.Y ) )
    {
        //copy centre
        pad_array.ROI = new Rectangle( image_object.Width, image_object.Height, Area_Image.Width, Area_Image.Height );
        CvInvoke.cvCopy( Area_Image, pad_array, IntPtr.Zero );

        pad_array.ROI = ( new Rectangle( 0, 0, dftSize.X, dftSize.Y ) );

        //Match Template
        using ( var result_Matrix = pad_array.MatchTemplate( image_object, TemplateMatchingType.CcoeffNormed ) )
        {
            Point[] MAX_Loc, Min_Loc;
            double[] min, max;
            //Limit ROI to look for Match

            result_Matrix.ROI = new Rectangle( image_object.Width, image_object.Height, Area_Image.Width - image_object.Width, Area_Image.Height - image_object.Height );

            result_Matrix.MinMax( out min, out max, out Min_Loc, out MAX_Loc );

            _location = new Point( ( MAX_Loc[ 0 ].X ), ( MAX_Loc[ 0 ].Y ) );
            var Results = result_Matrix.Convert<Gray, Double>();
            return _location;
        }
    }
}

我这样称呼:

Image<Bgr, Byte> My_Image = new Image<Bgr, Byte>("d:\\original.jpg");
Image<Gray, Byte> My_Image_Gray = My_Image.Convert<Gray, Byte>();
Image<Gray, Byte> Template = new Image<Gray, Byte>("d:\\template.jpg");
var pt = Detect_object( My_Image_Gray, Template );
My_Image.Draw(new CircleF(new PointF(pt.X, pt.Y), 10), new Bgr(0, 0, 255));
My_Image.Save("D:\\result.jpg");

现在可以正常工作了。

所以,我想,如果我有一堆不同角度和光照的模板,那么我可以尝试做自己的分类器(以某种方式-我需要研究如何做)

但是首先,我想让我们减小原始图像的大小并重新运行代码。

这次没有找到模板。

模板匹配也按尺寸进行吗?如果是这样,我还能探索什么其他技术?

谢谢

0 个答案:

没有答案