Captura de pantalla con OpenCV y Python-2.7

Estoy usando Python 2.7 y OpenCV 2.4.9 .

Necesito capturar el fotogtwig actual que se muestra al usuario y cargarlo como un objeto cv :: Mat en Python.

¿Saben ustedes una manera rápida de hacerlo recursivamente?

Necesito algo como lo que se hace en el siguiente ejemplo, que captura fotogtwigs Mat de una cámara web recursivamente:

import cv2 cap = cv2.VideoCapture(0) while(cap.isOpened()): ret, frame = cap.read() cv2.imshow('WindowName', frame) if cv2.waitKey(25) & 0xFF == ord('q'): cap.release() cv2.destroyAllWindows() break 

En el ejemplo, se utiliza la clase VideoCapture para trabajar con la imagen capturada desde la cámara web.

Con VideoCapture.read () siempre se lee y almacena un nuevo marco en un objeto Mat .

¿Puedo cargar una “secuencia de copias impresas” en un objeto VideoCapture? ¿Puedo crear una transmisión de la pantalla de mi computadora con OpenCV en Python, sin tener que guardar y eliminar muchos archivos .bmp por segundo?

Necesito que estos marcos sean objetos Mat o matrices NumPy , por lo que puedo realizar algunas rutinas de Visión por Computador con estos marcos en tiempo real.

Ese es un código de solución que he escrito usando los consejos de @Raoul.

Usé el módulo PIL ImageGrab para agarrar los marcos de la pantalla de impresión.

 import numpy as np from PIL import ImageGrab import cv2 while(True): printscreen_pil = ImageGrab.grab() printscreen_numpy = np.array(printscreen_pil.getdata(),dtype='uint8')\ .reshape((printscreen_pil.size[1],printscreen_pil.size[0],3)) cv2.imshow('window',printscreen_numpy) if cv2.waitKey(25) & 0xFF == ord('q'): cv2.destroyAllWindows() break 

Tuve problemas de velocidad de fotogtwigs con otras soluciones, mss resolverlos.

 import numpy as np import cv2 from mss import mss from PIL import Image mon = {'top': 160, 'left': 160, 'width': 200, 'height': 200} sct = mss() while 1: sct.get_pixels(mon) img = Image.frombytes('RGB', (sct.width, sct.height), sct.image) cv2.imshow('test', np.array(img)) if cv2.waitKey(25) & 0xFF == ord('q'): cv2.destroyAllWindows() break