【问题标题】:Template matching usink mask in opencv (emgu)opencv(emgu)中的模板匹配usink掩码
【发布时间】:2013-10-09 09:59:06
【问题描述】:

我想在另一张图片中找到一张图片。但是,我不想考虑这两个图像中的一些区域像素。所以我正在考虑使用某种带有零或一的掩码来表示好的像素。

我正在使用 emgu 的 MatchTemplate 方法,它不接受掩码。有没有其他方法可以做我想做的事情?谢谢!

ReferenceImage.MatchTemplate(templateImage, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCORR_NORMED);

【问题讨论】:

  • 能否提供图片和模板帮助我们理解?另外,请告诉使用您要遮盖图像的哪一部分。
  • 我刚刚发现另一个关于完全相同问题的问题:stackoverflow.com/questions/4761940/…

标签: c# opencv emgucv


【解决方案1】:

我想到了一个解决方案。假设 referenceImageMask 和 templateMask 在好像素中有 1,在坏像素中有 0。并且那个 referenceImage 和 templateImage 已经被屏蔽并且坏像素中也有 0。

然后,模板匹配的第一个结果将给出图像之间未归一化的互相关。

第二个模板匹配将为每个可能的偏移量提供两个图像中同时不同于零(未屏蔽)的像素数。

然后,通过该数字对相关性进行归一化应该会给出我想要的值。两幅图像中未被屏蔽的像素的平均乘积。

Image<Gray, float> imCorr = referenceImage.MatchTemplate(templateImage,      Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCORR);
Image<Gray, float> imCorrMask = referenceImageMask.MatchTemplate(templateMask, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCORR);
imCorr = imCorr .Mul(imCorrMask .Pow(-1));

【讨论】:

    【解决方案2】:

    今天你可以使用这个方法:

    CvInvoke.MatchTemplate(actualImage, expectedImage, result, TemplateMatchingType.CcoeffNormed, mask);
    

    【讨论】:

    • 嗨安德烈,你能详细说明一下为什么这会起作用吗?对于阅读这篇文章的其他人来说,一些背景知识会有很长的路要走——它是什么时候添加的,类似的东西:)
    • 只需在此处查找文档:emgu.com/wiki/files/4.5.2/document/html/…
    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多