PIL ImageGrab bbox захватывает конкретное окно
Я пытаюсь захватить определенные окна на своем компьютере и отобразить их с помощью 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 и следить за окном, но я заметил, что если оси x и y bbox больше, чем ширина и высота, произойдет ошибка. Кроме того, всякий раз, когда я пытаюсь переместить браузер Chrome, клавиши высоты и ширины фрейма подстраиваются сами. Есть идеи, как решить эти проблемы?
1 ответ
Проблема возникает из-за вашего ImageGrab.grab
вызов. К сожалению, это не упоминается в самой документации, но из исходного кода видно, что это:
ImageGrab.grab(bbox=(left, top, right, bottom))
Итак, вы должны рассчитать
right
а также
bottom
соответственно. Этот код отлично работает для меня:
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
----------------------------------------