我正在使用opencv和opencvsharp。
当做一个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);
}
我只找到第一场比赛,我知道还有更多比赛。
答案 0 :(得分:1)
try
{
IplImage tpl = Cv.LoadImage("template path", LoadMode.Color);
IplImage img = Cv.LoadImage("main image path", LoadMode.Color);
IplImage res = Cv.CreateImage(Cv.Size(img.Width - tpl.Width + 1, img.Height - tpl.Height + 1), BitDepth.F32, 1);
Cv.MatchTemplate(img, tpl, res, MatchTemplateMethod.CCoeffNormed);
Cv.Threshold(res, res, 0.9, 255, ThresholdType.ToZero);
while (true)
{
CvPoint minloc, maxloc;
double minval, maxval, threshold = 0.95;
Cv.MinMaxLoc(res, out minval, out maxval, out minloc, out maxloc, null);
if (maxval > threshold)
{
Console.WriteLine("Matched " + maxloc.X + "," + maxloc.Y);
Cv.FloodFill(res, maxloc, new CvScalar());
}
else
{
Console.WriteLine("No More Matches");
break;
}
}
Cv.ReleaseImage(res);
Cv.ReleaseImage(img);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
答案 1 :(得分:0)