使用matchtemplate opencv opencvsharp查找所有匹配项

Cas*_*sen 7 opencv image-processing opencvdotnet

我在opencvsharp中使用opencv.

在做一个matchtemplate和之后的minmaxloc我只得到第一场比赛.我如何获得所有比赛?

            Cv.MatchTemplate(tempImg, templateSymbol.Img, resImg, MatchTemplateMethod.CCorrNormed);
            double min_val, max_val;
            Cv.MinMaxLoc(resImg, out min_val, out max_val);
            if (max_val > 0.5)
            {

                symbolsFound.Add(templateSymbol.Description);
                Console.WriteLine(templateSymbol.Description);
            }
Run Code Online (Sandbox Code Playgroud)

我只找到第一场比赛,我知道还有更多比赛.

mev*_*ron 0

请参阅我的其他答案,其中我展示了如何完全按照您的要求进行操作。它是用 C++ 编写的,但移植到 C# 应该相当简单。而不是使用std::queue.NET队列。

本质上,您需要扫描resImg所有最大(或最小,取决于比较算法)点,并将尽可能多的点记录到某种容器中(列表、队列、优先级队列等......) 。MinMaxLoc只会返回最上面的匹配,所以这就是为什么你只得到一场匹配。