emgu在图像b找到图像的[复制](emgu finding image a in image b

2019-09-02 02:26发布

这个问题已经在这里有一个答案:

  • OpenCV的另一幅图像上寻找图像cordinates 3个回答

我是新来emgu,想从哪里开始一些建议。

我已经通过形状检测看了,但其过于复杂的东西,我需要..我想..和我的surfexample不工作。 我得到这个错误:

无法取得在EMGU.CV SURF例如工作?

无论如何,这是我想做些什么:查找图像B.形象的图像A是一个简单的方形,它总是有相同的灰色1个像素的边界,总是相同的尺寸(我认为),但内部颜色可能为黑色或的约7其他颜色(只有永远纯色)之一。 我需要找到图像A的图像b的坐标当我按下一个按钮。 看到下面的图片。

图像B

形象

Answer 1:

Goosebumps的答案是正确的,但我认为一些代码可能会有所帮助也。 这是使用我的代码MatchTemplate来检测源图像(图像B)内的模板(图像A)。 作为Goosebumps注意,你可能要包括围绕模板一些灰色。

Image<Bgr, byte> source = new Image<Bgr, byte>(filepathB); // Image B
Image<Bgr, byte> template = new Image<Bgr, byte>(filepathA); // Image A
Image<Bgr, byte> imageToShow = source.Copy();

using (Image<Gray, float> result = source.MatchTemplate(template, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED))
{
    double[] minValues, maxValues;
    Point[] minLocations, maxLocations;
    result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);

    // You can try different values of the threshold. I guess somewhere between 0.75 and 0.95 would be good.
    if (maxValues[0] > 0.9)
    {
        // This is a match. Do something with it, for example draw a rectangle around it.
        Rectangle match = new Rectangle(maxLocations[0], template.Size);
        imageToShow.Draw(match, new Bgr(Color.Red), 3);
    }
}

// Show imageToShow in an ImageBox (here assumed to be called imageBox1)
imageBox1.Image = imageToShow;


Answer 2:

你可以看看http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html这可能是你在找什么。 你的黑方将成为模板。 您可以尝试还包括它周围的灰一点点。 这将使探测器从fireing大黑色区域。



文章来源: emgu finding image a in image b [duplicate]