如何显示来自OpenCV.MatchTemplate的绘制矩形

问题描述 投票:0回答:1

我正在尝试在屏幕快照中查找图像并在其周围绘制一个矩形。我不了解它如何解释result矩阵以识别包含图像的区域。

下面的代码将绘制一个矩形,但是它并不是真正在正确的位置,我不知道这是否是因为我没有正确使用result或其他方式。

using (Mat templateImage = CvInvoke.Imread("\\top_1.png", Emgu.CV.CvEnum.ImreadModes.AnyColor))
using (Mat inputImage = CvInvoke.Imread(AppDomain.CurrentDomain.BaseDirectory + "\\currentScreen.png", Emgu.CV.CvEnum.ImreadModes.AnyColor))
{
    Mat result = new Mat();
    CvInvoke.MatchTemplate(inputImage, templateImage, result, Emgu.CV.CvEnum.TemplateMatchingType.SqdiffNormed);

    result.MinMax(out double[] minVal, out double[] maxVal, out Point[] minLoc, out Point[] maxLoc);

    int x = minLoc[0].X;
    int y = minLoc[0].Y;
    int w = maxLoc[0].X - minLoc[0].X;
    int h = maxLoc[0].Y - minLoc[0].Y;

    Form f = new Form
    {
        BackColor = Color.Red,
        //TransparencyKey = Color.Red,
        FormBorderStyle = FormBorderStyle.None,
        TopMost = true,
        Location = new Point(x, y),
        Size = new Size(w, h)
    };

    Application.EnableVisualStyles();
    Application.Run(f);
}
c# opencv emgucv
1个回答
0
投票

我唯一看到的是表单的位置,您必须将StarPosition设置为Manual

            Form f = new Form
            {
                StartPosition = FormStartPosition.Manual,
                BackColor = Color.Red,
                //TransparencyKey = Color.Red,
                FormBorderStyle = FormBorderStyle.None,
                TopMost = true,
                Location = new Point(x, y),
                Size = new Size(w, h)
            };

This is the screen Image

This is the template

This is the result

This is with out StartPosition

© www.soinside.com 2019 - 2024. All rights reserved.