emgu在图像b中找到图像a [重复]

Posted

技术标签:

【中文标题】emgu在图像b中找到图像a [重复]【英文标题】:emgu finding image a in image b [duplicate] 【发布时间】:2013-04-30 16:38:14 【问题描述】:

我是 emgu 的新手,想要一些关于从哪里开始的建议。

我已经查看了形状检测,但它对于我需要的东西来说太复杂了..我认为..而且我的 surfexample 不起作用。我收到此错误:

Cannot get SURF example in EMGU.CV to work?

无论如何,这就是我想做的:在图像 B 中找到图像 A。图像 A 是一个简单的正方形,它始终具有相同的灰色 1 像素边框并且始终具有相同的大小(我相信)但内部颜色可以是黑色或大约 7 种其他颜色中的一种(只有纯色)。当我按下按钮时,我需要在图像 b 中找到图像 A 的坐标。见下图。

图片B

图片A

【问题讨论】:

感谢您帮助我格式化我的帖子。 :(没有想法?或者EMGU的哪个领域最适合这个? 是的,看看this question。 【参考方案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;

【讨论】:

一个简单的问题,在你的代码中它说“source.Draw”这个绘图是直接在资源文件夹中的图像(称为源)上吗?或到图片框(称为源)?我不明白如何设置源和模板。 它在图像上绘图。 sourcetemplateImage&lt;Bgr, byte&gt;。查看更新的答案。 谢谢!当我尝试时,我几乎拥有它:P 在此之后我有另一个问题说:无法将类型'Emgu.CV.Image'隐式转换为'System.Drawing.Image'所以我改变了ImageBox1.Image = imageToShow.Bitmap;但现在我有一个 'Emgu.CV.CvInvoke' 抛出了异常。 :( 顺便说一句,上面的所有代码都能完美运行!我刚刚将我的 exe 复制到 emgu 附带的示例文件夹中,它可以工作!这是我的 Dll,现在我使用:emgu.com/wiki/index.php/Download_And_Installation 添加它们,它工作正常 :) 谢谢!! 如果较小的图像被调整大小或旋转,有什么办法可以做到这一点?【参考方案2】:

你可以看看http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html 这可能就是您正在寻找的。你的黑色方块将是模板。您也可以尝试在其周围添加一点灰色。这将防止探测器在大片黑色区域上发射。

【讨论】:

感谢这个伟大的页面!很多有用的信息:)

以上是关于emgu在图像b中找到图像a [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在图像中查找重复的图案/图像

使用 Emgu CV C# 创建轮廓蒙版以仅在原始图像上显示 ROI

将一个图像中的 SURF 描述符与其他图像中的描述符列表进行比较

如何在 Xamarin Forms 中打开图像并将其与 Emgu Cv/OpenCvSharp 一起使用?

在 tableviewcell 中重复加载图像

图像数据访问和图像匹配中的 C# 和 EMgu CV