2014-12-07 103 views
1

我想了解如何在Python 2.7中使用PIL來搜索特定圖像的整個屏幕並單擊它。我一直在四處搜尋,一直未能找到解決方案。我想創建一個小圖形用戶界面,在它的中間有一個按鈕,單擊它時會搜索整個屏幕以查找預定義的圖像。一旦找到圖像,程序將點擊它的中心並結束。簡而言之,程序會檢測用戶屏幕上是否存在圖像並點擊它。使用PIL(Python圖像庫)來檢測屏幕上的圖像

我在Sikuli上找到了一個有趣的位,但是這並不能幫助我,因爲它無法導出到.exe。

程序查找的圖像很可能在每次搜索時位於同一位置,但我不想對位置進行硬編碼,因爲它有可能移動,我不想這是後面的問題。

我需要的是我用來在屏幕上搜索圖像並將線返回給變量的代碼方法。

圖片說明/例子:步槍 Image

參考圖像: Image2

+0

所以屏幕上的圖像將是相同的尺寸或不同的參考圖像的? – 2014-12-07 15:12:15

+0

是的,它會有所不同。粗略地大約相同的大小。 – Freddie 2014-12-07 15:29:55

+0

搜索一個確切的圖像很容易。尋找一個相似的圖像需要一個圖像識別算法,並且要困難得多。 – Gabe 2014-12-07 15:48:46

回答

3

PIL是這個職位的錯誤的工具。相反,你應該看看openCV(開源計算機視覺),它具有奇妙的Python綁定。下面是一個例子的鏈接(在C,但應該很容易與Python綁定重做)已經做了你在找什麼,但即使允許圖像進行旋轉,縮放等

http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html http://docs.opencv.org/doc/tutorials/features2d/detection_of_planar_objects/detection_of_planar_objects.html

編輯:

我假設你使用的是windows,因爲你的示例圖像看起來像是窗口。在這種情況下,您可以使用:

from PIL import ImageGrab 
pil_img = ImageGrab.grab() 
opencv_img = numpy.array(pil_img) 

然後使用opencv處理圖像以查找要查找的子圖像。

如果你想這樣做跨平臺的,那麼你就需要使用wxWidgets的做screengrab:https://stackoverflow.com/a/10089645/455532

+0

我試圖從程序窗口外部檢測圖像。它需要能夠搜索整個屏幕。 – Freddie 2014-12-07 19:07:41

+0

ammended above – Kyle 2014-12-07 19:11:12

+0

您可以詳細瞭解我如何使用它來搜索屏幕。我有真正的問題。 – Freddie 2014-12-08 01:35:46