Python 在使用ImageGrab检索的较大图像中检测较小的图像(.png)?
在过去的一个小时里,我一直在研究这个简单的主题,但我遇到的所有答案都非常复杂,作为Python的新手,我无法将其中任何一个整合到我的程序中 我正在尝试让AI玩一个浏览器版的钢琴游戏。到目前为止,我只是简单地尝试捕获游戏窗口(我电脑屏幕的一小部分),然后用游戏开始按钮的.png检查游戏窗口。从那里,我将继续点击开始按钮,但这是一个问题,为下一次 如何检查图像是否包含.png文件? 这是我目前的代码:Python 在使用ImageGrab检索的较大图像中检测较小的图像(.png)?,python,python-imaging-library,Python,Python Imaging Library,在过去的一个小时里,我一直在研究这个简单的主题,但我遇到的所有答案都非常复杂,作为Python的新手,我无法将其中任何一个整合到我的程序中 我正在尝试让AI玩一个浏览器版的钢琴游戏。到目前为止,我只是简单地尝试捕获游戏窗口(我电脑屏幕的一小部分),然后用游戏开始按钮的.png检查游戏窗口。从那里,我将继续点击开始按钮,但这是一个问题,为下一次 如何检查图像是否包含.png文件? 这是我目前的代码: from PIL import ImageGrab as ig, ImageOps as io,
from PIL import ImageGrab as ig, ImageOps as io, Image
import pyautogui
import bbox
def grabStart(window):
#The start button
start = Image.open("res/StartButton.PNG")
start = io.grayscale(start)
#This is the part I need to figure out. The following is just pseudocode
if window.contains(start): #I know that this doesn't actually work. Just pseudocode
#I'd like to return the location of 'start' in one of the following forms
return either: (x1, y1, x2, y2), (x1, y1, width, height), (a coordinate within 'start'))
def grabGame():
#The coordinates of the entire game window
x1 = 2222
y1 = 320
x2 = 2850
y2 = 1105
#The entire screen of the game
window = ig.grab(bbox = (x1, y1, x2, y2))
window = io.grayscale(window)
return window
grabStart(grabGame())
尝试使用
pyautogui.locate()
。函数输入两个参数,第一个是需要查找的图像,第二个是需要查找较小图像的图像。此方法仅适用于图像,因此如果您想为活窗口运行此操作,则可以考虑另一个选项。其次,pyautogui
只是PIL
的一个包装器,因此如果您遇到效率问题,您可能需要将locate()
转换为其与PIL等效的性能。尝试使用pyautogui.locate()
。函数输入两个参数,第一个是需要查找的图像,第二个是需要查找较小图像的图像。此方法仅适用于图像,因此如果您想为活窗口运行此操作,则可以考虑另一个选项。其次,pyautogui
只是PIL
的一个包装器,因此如果您遇到效率问题,您可能需要将locate()
转换为它的PIL等价物以提高性能。下面是一种方法。我只是让程序运行,打开/关闭并在屏幕上移动按钮预览,看看它是否能找到按钮并正确报告坐标
#!/usr/bin/env python3
from PIL import ImageGrab as ig, Image
import pyautogui as ag
def checkButton(button, window):
try:
location = ag.locate(button, window, confidence=0.8)
print(f'location: {location[0]},{location[1]},{location[2]},{location[3]}')
except:
print('Not found')
# Load button just once at startup
button = Image.open("button.png")
# Loop, looking for button
while True:
window = ig.grab()
checkButton(button, window)
这里有一个方法。我只是让程序运行,打开/关闭并在屏幕上移动按钮预览,看看它是否能找到按钮并正确报告坐标
#!/usr/bin/env python3
from PIL import ImageGrab as ig, Image
import pyautogui as ag
def checkButton(button, window):
try:
location = ag.locate(button, window, confidence=0.8)
print(f'location: {location[0]},{location[1]},{location[2]},{location[3]}')
except:
print('Not found')
# Load button just once at startup
button = Image.open("button.png")
# Loop, looking for button
while True:
window = ig.grab()
checkButton(button, window)
@谢谢你的编辑建议。我接受了他们所有,除了舍邦,我更喜欢离开,所以很明显我的目标是蟒蛇3。我讨厌在网上找到适合蟒蛇2的东西却没有意识到。真是一个骗局?我不熟悉Linux的东西,所以请原谅。@VasuDeo.S它告诉shell使用哪个程序来运行脚本。Windows依赖于文件名中的扩展名,但Linux/macOS不依赖。所以,我可以在Linux上编写一个没有扩展的脚本,它仍然知道如何运行它。Windows忽略shebang,因此它在Windows上是无害的。因此,在linux上,您可以编写一个名为
Mark
的python文件,而不需要.py
扩展名,只需添加#/usr/bin/env python3
在python文件的开头,操作系统会将该文件解释为python文件吗?如果文件保存为Mark.py
,会发生什么?这两者都会产生同样的效果吗?谢谢你花时间回答我的疑问。^^^^@VasuDeo.S谢谢你的编辑建议。我接受了他们所有,除了舍邦,我更喜欢离开,所以很明显我的目标是蟒蛇3。我讨厌在网上找到适合蟒蛇2的东西却没有意识到。真是一个骗局?我不熟悉Linux的东西,所以请原谅。@VasuDeo.S它告诉shell使用哪个程序来运行脚本。Windows依赖于文件名中的扩展名,但Linux/macOS不依赖。所以,我可以在Linux上编写一个没有扩展的脚本,它仍然知道如何运行它。Windows忽略shebang,因此它在Windows上是无害的。因此,在linux上,您可以编写一个名为Mark
的python文件,而不需要.py
扩展名,只需添加#/usr/bin/env python3
在python文件的开头,操作系统会将该文件解释为python文件吗?如果文件保存为Mark.py
,会发生什么?这两种方法都会产生同样的效果吗?谢谢你花时间回答我的疑问。^ ^我的答案或其他答案解决了你的问题吗?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢我的答案或其他答案解决了你的问题吗?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢