簡體   English   中英

為什么特定窗口的 PIL.ImageGrab.grab 無法正常工作?

[英]Why does PIL.ImageGrab.grab of specific window doesn't work properly?

我正在嘗試捕獲特定窗口,並使用以下代碼使用ImageGrab顯示它們:

import cv2
import numpy as np
from PIL import ImageGrab
import pygetwindow
import pyautogui

titles = pygetwindow.getAllTitles()

while(1):
    cars = pygetwindow.getWindowsWithTitle('car - Google Search - Google Chrome')[0]
    print(cars.left, cars.top ,cars.width, cars.height)
    img = ImageGrab.grab(bbox=(int(cars.left),int(cars.top),cars.width,cars.height)) #x, y, w, h
    img_np = np.array(img)
    frame = cv2.cvtColor(img_np, cv2.CV_8U)
    cv2.waitKey(1)
    cv2.imshow("frame", frame)
cv2.destroyAllWindows()

它以某種方式能夠顯示Chrome,並且能夠跟隨窗口,但是我注意到bboxxy軸是否大於寬度和高度,會出現錯誤。 此外,每當我嘗試移動 Chrome 瀏覽器時,框架的高度和寬度鍵都會自行調整。 關於如何解決這些問題的任何想法?

問題源於您的ImageGrab.grab調用。 不幸的是,文檔本身並沒有提到它,但是從源代碼中可以看到,它是:

ImageGrab.grab(bbox=(left, top, right, bottom))

因此,您必須相應地計算rightbottom 這段代碼對我來說非常好:

import cv2
import numpy as np
from PIL import ImageGrab
import pygetwindow

titles = pygetwindow.getAllTitles()

while True:
    cars = pygetwindow.getWindowsWithTitle('car - Google Search - Google Chrome')[0]
    print(cars.left, cars.top, cars.width, cars.height)
    img = ImageGrab.grab(bbox=(int(cars.left),
                               int(cars.top),
                               int(cars.left + cars.width),
                               int(cars.top + cars.height)))
    frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
    cv2.waitKey(1)
    cv2.imshow('frame', frame)

請注意,我還更正了您的cv2.cvtColor調用,以便顯示正確的顏色。

----------------------------------------
System information
----------------------------------------
Platform:      Windows-10-10.0.19041-SP0
Python:        3.9.1
PyCharm:       2021.1.3
NumPy:         1.20.3
OpenCV:        4.5.2
Pillow:        8.3.0
pygetwindow:   0.0.9
----------------------------------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM