Python 2.7およびOpenCV 2.4.9を使用しています。
ユーザーに表示されている現在のフレームをキャプチャし、cv ::マット Pythonのオブジェクト。
あなたは再帰的にそれを行う高速な方法を知っていますか?
次の例で行われているような、キャプチャするものが必要ですマットウェブカメラからのフレームを再帰的に:
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
この例では、VideoCaptureクラスを使用して、Webカメラからキャプチャした画像を操作します。
VideoCapture.read()を使用すると、常に新しいフレームが読み込まれ、 マット オブジェクト。
"printscreens stream"をVideoCaptureオブジェクトにロードできますか? PythonのOpenCVを使用して、多くの。bmpファイル/秒を保存および削除することなく、コンピューターの画面のストリーミングを作成できますか?
このフレームが必要です マット オブジェクトまたは NumPy配列、したがって、このフレームを使用してリアルタイムでいくつかのコンピュータービジョンルーチンを実行できます。
これは、@ Raoulのヒントを使用して作成したソリューションコードです。
PIL ImageGrabモジュールを使用して、printscreenフレームを取得しました。
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
私は他のソリューションでフレームレートの問題がありました mss それらを解決します。
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