我正在尝试为游戏制作机器人。基本上,它是从地面上捡起物品的,但有时这些物品看起来有些不同。角度是不同的,或者它们躺在不同颜色的地面等上。要使一切正常,我需要多个模板。有什么办法吗?如果您不明白,请在评论中告诉我。这是我到目前为止尝试过的:
String script = "return document.getElementsByName(\"origin\").value";
这有效,但可能会更好。你有什么想法吗?
答案 0 :(得分:0)
在您当前的代码中,有很多步骤执行多次,而一次(每帧)就足够了。通过将它们分开可以提高效率。
您当前正在每帧上重新加载模板,这效率非常低,因为您很容易每秒获得100多个加载。而是创建一个保存模板的列表,以便它们保留在内存中。从内存访问比从磁盘加载要快得多。
您可以对模板的宽度/长度执行相同的操作,但实际上并未在代码中使用它,因此也许可以一起跳过所有内容。
阈值只需设置一次。
templates = []
templ_shapes = []
threshold = 0.70
for i in range(6):
templates.append(cv2.imread("bones_{}.png".format(i),0))
templ_shapes.append(templates[i].shape[:: -1])
所有模板都可以与同一个屏幕抓图进行比较,因此您应该将其放在for循环之外。这是一个轻松但相当大的胜利。因此,在每一帧上,只抓屏一次,然后匹配所有模板。为了清楚和方便起见,您可以将其放在函数中:
def doTemplateMatch():
img_gray = cv2.cvtColor(imageGrab(), cv2.COLOR_BGR2GRAY)
for template in templates:
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
loc = np.where( res >= threshold)