使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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