0

我尝试使用 MatchTemplate() 来匹配图像中的数字。例如,图像中的数字是 [0985-977-735]。结果如下:(number, location) [(0, 1), (3, 103), (5, 33), (5, 116), (7, 62), (7, 73), ( 7, 85), (8, 21), (9, 11), (9, 53)]

但在大多数情况下,准确度非常低。

[0983-945-180]: [(0, 113), (1, 93), (3, 31), (4, 62), (5, 74), (8, 103), (9, 11) , (9, 53)] 第一个零和八无法识别。

[0932-509-607] [(0, 103), (2, 31), (3, 21), (5, 54), (6, 92), (7, 113), (9, 72)]第一个,第二个零和前九个无法识别。

[0911-873-752] [(0, 1), (1, 22), (1, 33), (2, 113), (3, 72), (5, 105), (7, 92), (8, 52), (9, 11)] 前七个无法识别。

部分代码如下:

import cv
for i in range(10):
    template_im = cv.LoadImage(template_file, cv.CV_LOAD_IMAGE_GRAYSCALE)
    width = original_im.width - template_im.width + 1
    height = original_im.height - template_im.height +1
    result_image = cv.CreateImage((width, height), cv.IPL_DEPTH_32F, 1)
    cv.Zero(result_image)
    cv.MatchTemplate(original_im, template_im, result_image, cv.CV_TM_CCOEFF_NORMED)
    (_, R, _, max_loc) = cv.MinMaxLoc(result_image)

    if R < 0.90:
        pass
    else:
        phone_number_location.append((i, max_loc[0]))
        ...
        ...
4

1 回答 1

0

您可能希望为此使用 SimpleCV。它是用python编写的。你需要的大部分东西都在里面。我只用 15 行代码编写了一个基本的图像拼接应用程序。希望这可以帮助。使用 github 中的代码,因为模板匹配在 SimpleCV 中是新的。希望这可以帮助。

于 2012-04-23T17:33:50.353 回答