只是想清除我的困惑。我測試了openCV模板匹配方法來匹配一些數字。首先我有這個數字序列0 1 2 3 4 5 1 2 3 4 5(在二進制化之後,字符寬度可能不同)。模板匹配如何工作以匹配數字「1」?可以;瞭解openCV中的模板匹配
- 滑動通過所有的窗口,直到它發現2個匹配(2輸出),或
- 停止後它匹配第一「1」,或
- 找到兩個數之間的相關性最高「1」並選擇其中一個。
編輯:由於附着是輸出。它只匹配一個數字'1'而不是兩個'1'。
[問]我怎樣才能同時檢測兩個數字'1'?
只是想清除我的困惑。我測試了openCV模板匹配方法來匹配一些數字。首先我有這個數字序列0 1 2 3 4 5 1 2 3 4 5(在二進制化之後,字符寬度可能不同)。模板匹配如何工作以匹配數字「1」?可以;瞭解openCV中的模板匹配
編輯:由於附着是輸出。它只匹配一個數字'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
}
編輯
下面是輸出的一個例子:
你應該用Google多一點.. .http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matchi ng/template_matching.html –
是的,我在閱讀之前將其發佈在此處。但是,當我試着對我的例子只選擇一個數字來匹配。 – Mzk
您正在使用哪種匹配方法?相關性?嘗試CV_TM_SQDIFF –