我正在尝试创建一个程序,可以输入一个图像(我是通过PIL的imageGrab来完成的),并检测其中一些已知的符号及其位置。好在我很确定我不需要神经网络,因为我知道每个符号的确切形状和大小。问题是我不知道这些会有多少,以及每个符号的背景颜色是什么。有些符号是数字,我有一个图像的每个数字0-9,但可能有多达3位数的数字。我想我可以找到一种方法,通过它们的位置来知道哪个数字是同一个数字的一部分,但我们稍后再讨论。现在,我已经将图像转换成灰度,并使用opencv2显示它。在
你知道我怎么用opencv做吗?其他图书馆? 我需要它足够快,希望每秒10帧。在
这是我当前的代码(修改后的sentdex's "python plays GTA" code,页面最底部):
import numpy as np
from PIL import ImageGrab
import cv2
def 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(目前)。我找到了一个不错的教程here。我的问题是当没有一个完全匹配的模板,意味着没有数字2s,或大于1。当没有任何一个时,它看起来像是在图像上随机选择一些东西,当有多个时,我只检测到其中一个。用不同的方式来满足我的需要,有可能吗?在
所以,我有办法解决我的问题。 对于将来访问此页面以获取帮助的所有人,以下是对图像中的模板进行重新组织的步骤:
创建两个图像,一个是您要检测的,另一个是您的模板。 然后,使用opencv上传您想要的任何人,并复制以下函数:
并使用这些线在图像上绘制边界框:
^{pr2}$然后你可以用cv2.imshow()绘制所有的东西
相关问题 更多 >
编程相关推荐