理解openCV中的模板匹配
只是想澄清我的困惑。我已经测试了openCV模板匹配方法来匹配一些数字。首先,我有一个数字0 1 2 3 4 5 1 2 3 4 5的序列(二值化后,字符宽度可能不同)。模板匹配如何与数字“1”匹配?是的理解openCV中的模板匹配,opencv,Opencv,只是想澄清我的困惑。我已经测试了openCV模板匹配方法来匹配一些数字。首先,我有一个数字0 1 2 3 4 5 1 2 3 4 5的序列(二值化后,字符宽度可能不同)。模板匹配如何与数字“1”匹配?是的 在所有窗口中滑动,直到找到2个匹配项(2个输出),或 匹配第一个“1”后停止,或 找到两个数字“1”之间的最高相关性,然后选择其中一个 编辑:输出如附件所示。它只匹配一个数字“1”,而不匹配两个数字“1” [Q] 如何同时检测两个数字“1”?我知道这是一个老问题,但这里有一个答案 当您进行匹
[Q] 如何同时检测两个数字“1”?我知道这是一个老问题,但这里有一个答案 当您进行匹配模板时,它将输出灰度图像。在那之后,你需要在上面做一个最小最大值。然后,您可以检查在您要查找的范围内是否有结果。在下面的示例中,我使用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
}
Image结果=新图像(新系统图尺寸(nWidth,nHeight));
结果=image.CurrentImage.MatchTemplate(_imageTemplate.CurrentImage,Emgu.CvEnum.TM_TYPE.CV_TM_SQDIFF_NORMED);
双重价值观;
双[]最大值;
系统.图纸.点位置;
系统.图纸.点[]最大位置;
结果.MinMax(输出最小值、输出最大值、输出最小位置、输出最大位置);
如果(最小值[0]<0.75)
{
矩形rect=新矩形(新点(最小位置[0].X,最小位置[0].Y),
新大小(_imageTemplate.CurrentImage.Width,_imageTemplate.CurrentImage.Height));
image.CurrentImage.Draw(rect,新Bgr(0,0255),1);
}
其他的
{
//什么也没找到
}
编辑
以下是一个输出示例:
你应该在谷歌上多搜索一点……是的,我在这里发布之前已经看过了。但是,当我在我的示例中尝试时,只选择了一个数字进行匹配。您使用的是哪种匹配方法?相关性?尝试CV_TM_SQDIFF我使用的是CV_TM_CCORR_Normad,它的值为1.0(最高匹配)。您使用CV_TM_SQDIFF的输出是什么?您可以粘贴一些您所做操作的图像吗?我将在下周收到代码时编辑我的答案