PyAutoGui 圖片識別+定位+截圖函數文檔


前言:

本章節有個非常重要的函數 locateCenterOnScreen!

如果你有一個圖像文件,你可以在屏幕上直觀地定位一些東西。

它直接返回x,y坐標點,返回值可以給click()

PyAutoGUI可以獲取屏幕截圖,將它們保存到文件中,並在屏幕中識別並定位圖像。這是有用的,如果你有一個小的圖像,比方說,一個按鈕,需要點擊,並希望找到它在屏幕上。這些特性由PyScreeze模塊提供,該模塊與PyAutoGUI一起安裝

 

截圖功能需要依賴pillow模塊。

OSX使用screencapture命令,它與操作系統一起提供。

Linux使用scrot命令,可以通過運行sudo apt-get install scrot.

 

關於Ubuntu的特別說明

Ubuntu在安裝 pillow 方面似乎有一些缺陷。PNG和JPEG支持不包括在Ubuntu上的pillow中。以下鏈接有更多信息:https://stackoverflow.com/questions/7648200/pip-install-pil-e-tickets-1-no-jpeg-png-support http://ubuntuforums.org/showthread.php?t=1751455

 

import pyautogui as auto

 

 

屏幕截圖()函數

screenshot()

將返回 Image 對象(有關詳細信息,請參閱枕頭或PIL模塊文檔)。傳遞文件名的字符串將屏幕快照保存到文件中,並將其作為Image對象返回。

#  有一個可選的 region 關鍵字參數,如果不希望看到整個屏幕的截圖。

# 可以傳遞區域的左、頂、寬和高的四個整數元組來捕獲:

pic_1 = auto.screenshot()

pic_2 = auto.screenshot('my_screenshot.png') #在1920 x 1080屏幕上,screenshot()函數大約需要100毫秒

pic_3 = auto.screenshot("my_screenshot.png ",region=(0,0, 300, 400))

 

定位函數 (非常重要) 

在#1920 x 1080屏幕上,定位函數調用大約需要1或2秒 ,不適用於游戲腳本調用,原因是太慢

locateOnScreen()

例如,假設計算器應用程序在您的計算機上運行,如下所示:

 

 
 

# 當啟動計算器界面的時候,這時您不能直接調用moveTo()和click()函數,如果您不知道計算器按鈕的確切屏幕坐標。

# 每次啟動時,計算器都會出現在一個稍微不同的地方,因此每次都需要重新查找坐標。

# 但是,如果您有該按鈕的圖像,例如7按鈕的圖像:

 
 

# 就直接用圖片識別功能定位它的屏幕坐標(是元組,左、上、右、下),這個返回結果(元組)也可以給center()函數方法,轉化成x,y的坐標值

# 如果屏幕上找不到圖像,locateOnScreen()  則返回結果為:None.

number7_location = auto.locateOnScreen('calc7key.png')   #傳入按鈕的圖片

print(number7_location)  # 返回屏幕所在位置

>>>(1416, 562, 50, 41)

x,y = auto.center(number7_location )  # 轉化為 x,y坐標

print(number7_location)  #按鍵7的坐標是1441,582

>>> (1441, 582) 

auto.click(number7_location) 

# 點擊坐標,click()它是支持元組格式的坐標傳入的

#根據圖片識別定位x,y坐標(比較好用)

locateCenterOnScreen(image, grayscale=False)

返回找到的第一個截圖Image對象在屏幕上的中心坐標(x, y),如果沒找到返回None

auto.locateCenterOnScreen('1.png',grayscale=False)

#  參數grayscale是是否轉灰度

>>> (1441, 582) 

 

locateAllOnScreen(image, grayscale=False)

# 返回找到的所有相同截圖Image對象屏幕上的坐標,返回結果是(left, top, width, height)的‘生成器’

auto.locateAllOnScreen('xxx.png',grayscale=False)  #遍歷找到屏幕上所有顯示為xxx的圖像對象坐標,轉灰度操作=關閉

 

locate(needleImage, haystackImage, grayscale=False)

auto.locate('xxx.png')

# 返回找到的第一個截圖Image對象在haystackImage里面的坐標(left, top, width, height),如果沒找到返回None

locateAll(needleImage, haystackImage, grayscale=False)

auto.locateAll('xxx.png')

# 返回找到的所有相同截圖Image對象在haystackImage里面的坐標(left, top, width, height)的生成器

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM