2016年11月27日 星期日

用Python動態擷取特定程式畫面並用opencv輸出

想用Python抓取特定軟體視窗的畫面,並用opencv處理後輸出,google完發現了這幾篇:
1.使用win32gui抓取特定視窗的邊界
2. 用PIL+opencv抓取並顯示特定範圍的顯示畫面
3. python win32的文件

以下是抓取小算盤轉灰階後輸出的範例(window 10/python3.5):
  1. from PIL import ImageGrab
  2. import numpy as np
  3. import cv2
  4. import win32gui
  5.  
  6. hwnd = win32gui.FindWindow(None, '小算盤')
  7.  
  8. while True:
  9. try :
  10. left, top, right, bot = win32gui.GetWindowRect(hwnd)
  11. except :
  12. print("找不到視窗")
  13. break
  14. img = ImageGrab.grab(bbox = (left, top, right, bot))
  15. img_np = np.array(img)
  16. frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)
  17. cv2.imshow("screen box", frame)
  18. k = cv2.waitKey(30)&0xFF #64bits! need a mask
  19. if k ==27:
  20. cv2.destroyAllWindows()
  21. break

目前有幾個問題:
1. 視窗的名稱該如何擷取?
2. 目前是抓取該程式的畫面相對位置,如果該程式縮到最小或被其他程式蓋過,還是會持續抓取該位置的畫面。 如果希望持續擷取該程式的畫面該怎麼作?
 3. 有時候抓到的相對位置和實際位置會有一點點落差。

沒有留言:

張貼留言