使用OpenCV和Python检测图像中的图案和数字

我正在尝试编写一个程序,可以输入一张图像(我使用PIL的imageGrab来实现),并检测其中一些已知的符号及其位置。好消息是我几乎可以肯定我不需要使用神经网络,因为我知道每个符号的确切形状和大小。问题是我不知道这些符号会有多少,以及每个符号背景的颜色是什么。其中一些符号是数字,我有每一位数字0到9的图像,但可能有三位数的数字。我认为我可以通过它们的位置找到一种方法来确定哪些数字属于同一个数字,但我们稍后再讨论这个问题。现在,我已经将图像转换为灰度并使用opencv2的imshow显示它。

你有任何关于如何使用opencv来实现的想法吗?还是其他库?我需要它足够快,希望能达到每秒10帧的速度。

这是我当前的代码(修改自sentdex的“python玩GTA”代码,页面最底部):

import numpy as npfrom PIL import ImageGrabimport cv2def screen_record():     while(True):        global printscreen        image = ImageGrab.grab(bbox=(20,270,430,685))        printscreen = np.array(image)        grayscale_image = cv2.cvtColor(printscreen, cv2.COLOR_BGR2GRAY)        cv2.imshow('window', grayscale_image)        if cv2.waitKey(25) & 0xFF == ord('q'):            cv2.destroyAllWindows()            break        if cv2.waitKey(25) & 0xFF == ord('w'):            image.save("screen_shot.png")            print("Saved current window as image")screen_record()

编辑:我设法使用opencv的模板匹配得到了一些进展,目前仅限于数字2。我找到了一篇不错的教程这里。我的问题是当模板的匹配结果不正好是1个时,即没有数字2,或者多于1个时。当没有匹配时,看起来它会在图像上随机选择某个位置,而当有多个匹配时,我只能检测到其中一个。是否有可能以不同的方式应用它来满足我的需求?


回答:

所以,我找到了解决我的问题的方案。对于所有将来访问此页面寻求帮助的人,这里是识别图像中模板的步骤:

创建两张图像,一张是你想要检测的图像,另一张是你的模板。然后,使用opencv上传你想要的图像,并复制以下函数:

def locate_symbol(x, template):    w, h = filter_num2.shape[::-1]    res = cv2.matchTemplate(x, template, cv2.TM_SQDIFF_NORMED)    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)    min_thresh = 0.45    match_locations = np.where(res<=min_thresh)    return w, h, match_locations

然后使用这些行在图像上绘制边界框:

w, h, locs = locate_symbol(grayscale_image, filter_num2)for (x, y) in zip(locs[1], locs[0]):    cv2.rectangle(printable_image, (x, y), (x+w, y+h), [255, 0, 0], 2)

然后你可以使用cv2.imshow()来显示所有内容

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注