Потоковая передача кадров с экрана, генерация видео - PullRequest
1 голос
/ 14 февраля 2020

Если я хочу обновить sh изображение, я должен продолжать закрывать окно, чтобы обновить sh его. Возможно ли это, не закрывая окно? Вот код:

import numpy
import cv2
from PIL import ImageGrab
while True:

    img = ImageGrab.grab(bbox=(765,155,1135,195))
    img_np = numpy.array(img)
    frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)
    cv2.imshow("frame",frame)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

1 Ответ

1 голос
/ 14 февраля 2020

cv2.waitKey(0) ожидает без таймаута, замените его на cv2.waitKey(time_in_msec).

Пример обновления с частотой около 10 Гц:

import numpy
import cv2
from PIL import ImageGrab

while True:
    img = ImageGrab.grab(bbox=(765,155,1135,195))
    img_np = numpy.array(img)
    frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)
    cv2.imshow("frame",frame)
    cv2.waitKey(100)

cv2.destroyAllWindows()

См. waitKey dcomentation:

imshow
Отображает изображение в указанном окне.

Примечание. За этой функцией должна следовать функция waitKey, которая отображает изображение в течение указанных миллисекунд.
В противном случае оно не будет отображаться.
Например, waitKey (0) отобразит окно бесконечно, пока не будет нажата любая клавиша (она подходит для отображения изображения).
waitKey (25) будет отображать кадр в течение 25 мс, после чего дисплей будет автоматически закрыт.

...