Capture d'écran avec OpenCV et Python 2.7

Je suis en utilisant Python 2.7 et OpenCV 2.4.9.

J'ai besoin de capturer l'image actuelle qui est montré à l'utilisateur et de charger comme un cv::Mat objet en Python.

Savez-vous un moyen rapide de le faire de manière récursive?

J'ai besoin de quelque chose comme ce qui est fait dans l'exemple ci-dessous, qui capture Mat des images d'une webcam de manière récursive:

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

Dans l'exemple, il est utilisé le VideoCapture classe de travailler avec l'image capturée à partir de la webcam.

Avec VideoCapture.lire (), un nouveau cadre est toujours lues et stockées dans un Mat de l'objet.

Pourrais-je charger un "printscreens stream" dans un VideoCapture objet? Pourrais-je créer un flux de mon écran de l'ordinateur avec OpenCV en Python, sans avoir à les enregistrer et de supprimer beaucoup de .bmp fichiers par seconde?

J'ai besoin de ce châssis de Mat objets ou tableaux NumPy, afin que je puisse effectuer une certaine Vision par Ordinateur routines avec cette images en temps réel.

Il est difficile de dire ce que votre question est en réalité. Pourriez-vous modifier votre question afin de clarifier exactement ce que c'est? Par exemple, que voulez-vous dire 'de manière récursive'? frame contient déjà l'image. Pourquoi ne pas simplement utiliser directement?
Ce que je comprends, il est juste à la recherche d'un moyen pour injecter des printscreens comme des images plutôt que des images de la webcam. Depuis le moniteur n'est pas inclus dans la liste des périphériques pris en cv2.VideoCapture, il Vous suffit de saisir le printscreen d'ailleurs, tel que PIL Image.Imagegrab.grab(), de les convertir en un tableau numpy, et de l'injecter dans le code indiqué ci-dessus comme une image...

OriginalL'auteur Renan V. Novas | 2014-06-09