对几种类型的图像进行研究的最佳方法是什么。 这些是非常复杂的图像。 我在视频中搜索的每个图像都使用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)
答案 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);
}