OpenCvSharp将许多部分检测到图像中

时间:2017-05-28 20:13:42

标签: opencvsharp

对几种类型的图像进行研究的最佳方法是什么。 这些是非常复杂的图像。 我在视频中搜索的每个图像都使用MatchTemplate。 我需要知道每次都在寻找什么样的图像。

这是正确的方法吗?为我寻求的图像的每个部分进行治疗?

Mat finderone = ...........;
Mat findertwo = ...........;
Mat finder... = ...........;


var res1 = matSource.MatchTemplate(finderone,TemplateMatchModes.CCoeffNormed)
var res2 = matSource.MatchTemplatefindertwo,TemplateMatchModes.CCoeffNormed)
var res3 = matSource.MatchTemplate(.... , TemplateMatchModes.CCoeffNormed)

1 个答案:

答案 0 :(得分:0)

您的方法可能足够,但它有一些局限性。您的图案不应旋转,缩放或遮挡。

还有其他几种图像检测方法。例如,基于特征点,例如SURF,SIFT等。 OpenCV有关于在图像中查找已知对象的良好教程:feature homography

使用opencvsharp也很容易实现。

如果MatchTemplate符合您的要求,而您只想优化代码,那么就不可能,因为MatchTemplate无法在一段时间内处理多个模板。您可以做的最好的事情是,它可以提高代码的可读性,并将模板结构化为单个数组的垫子并在循环中检查它:

Mat[] templates = new Mat[] { finderone, finder..., finder_N };
Mat[] results = new Mat[templates.Lenght];
for (int i = 0; i < templates.Length; ++i) {
    results[i] = sourceMat.MatchTemplate(templates[i], TemplateMatchModes.CCoeffNormed);
}