c# - opencv(emgu)中的模板匹配usink掩码

标签 c# opencv emgucv

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

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

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

最佳答案

我想到了一个解决办法。假设 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));

关于c# - opencv(emgu)中的模板匹配usink掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146733/

相关文章:

python - 如何对图像中相同的法线向量进行分组(python)

Android OpenCV 查找最大的正方形或矩形

c# - OpenCV模板匹配结果为黑色

c# - 如何使用 PictureBox 打开/关闭相机

c# - 字符串未被识别为使用 C# 的有效日期时间

解决方案中的 C# 项目现在显示为 F#

python - 高分辨率下的CvtColor错误

c# - 如何获取 EmguCV ImageBox 图像?

c# - 我的用户控件上的所有基本属性是否都需要依赖属性?

c# - .NET Core 中的 OverrideAuthorization 属性