gpt4 book ai didi

opencv - 了解 openCV 中的模板匹配

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:24 27 4
gpt4 key购买 nike

只是想消除我的困惑。我已经测试了 openCV 模板匹配方法来匹配一些数字。首先,我有这个数字序列 0 1 2 3 4 5 1 2 3 4 5(二值化后字符宽度可能不同)。模板匹配如何匹配数字“1”?是吗;

  1. 在所有窗口中滑动,直到找到 2 个匹配项(2 个输出),或者
  2. 在匹配到第一个'1'后停止,或者
  3. 找到两个数字“1”之间的最高相关性并选择其中一个。

Matching Number '1'

已编辑:附件是输出。它只匹配一个数字“1”,不匹配两个“1”。

[问]如何同时检测两个数字“1”?

最佳答案

我知道这是一个老问题,但这里有一个答案。

当您执行 MatchTemplate 时,它​​将输出灰度图像。之后,您需要对其执行 MinMax。然后,您可以检查是否有您要查找的范围内的结果。在下面的示例中,我使用 EmguCV(C# 中 OpenCV 的包装器)在最佳查找值(minValues 数组的索引 0)周围绘制一个矩形,仅当它低于 0.75(您可以根据需要调整此阈值)时。

代码如下:

Image<Gray, float> result = new Image<Gray, float>(new System.Drawing.Size(nWidth, nHeight));
result = image.CurrentImage.MatchTemplate(_imageTemplate.CurrentImage, Emgu.CV.CvEnum.TM_TYPE.CV_TM_SQDIFF_NORMED);


double[] minValues;
double[] maxValues;
System.Drawing.Point[] minLocations;
System.Drawing.Point[] maxLocations;

result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);
if (minValues[0] < 0.75)
{
Rectangle rect = new Rectangle(new Point(minLocations[0].X, minLocations[0].Y),
new Size(_imageTemplate.CurrentImage.Width, _imageTemplate.CurrentImage.Height));
image.CurrentImage.Draw(rect, new Bgr(0,0,255), 1);
}
else
{
//Nothing has been found
}

编辑

这是一个输出示例:

Example of output

关于opencv - 了解 openCV 中的模板匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14311608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com