自分用の覚書。OpenCV*1で動画を録画するためのPythonミニマル・コード*2。
サンプル1:PC/ラズパイに接続されたUSBカメラ*3の動画像を表示する。終了はCtrl+C. VideoCapture()の引数の0はビデオデバイスの番号。
import cv2 cap = cv2.VideoCapture(0) try: while True: ret, frame = cap.read() if ret == True: cv2.imshow('a',frame) cv2.waitKey(1) except KeyboardInterrupt: cap.release() cv2.destroyAllWindows()
サンプル2:PCに接続されたカメラの動画像をディスプレイに表示し、ファイル'test.m4v'に録画する。終了はCtrl+C.([2019.6.24追記]手元のRPiではデスクトップ環境上の Python3(IDLE)を使って実行すると、出力した動画ファイルが常に壊れていた。LXTerminal上で実行すると、再生可能な動画ファイルを出力した。)低速度撮影(time lapse)は2, 12, 20行頭の#を取る
import cv2 #import time cap = cv2.VideoCapture(0) fps = cap.get(cv2.CAP_PROP_FPS) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fname = 'test.m4v' fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') size = (width,height) writer = cv2.VideoWriter(fname, fmt, fps, size) #intrvl = 1 #[sec] set time interval of time-lapse recording try: while True: ret, frame = cap.read() if ret == True: cv2.imshow('a',frame) writer.write(frame) #time.sleep(intrvl) # waiting (for time-lapse) cv2.waitKey(1) except KeyboardInterrupt: cap.release() cv2.destroyAllWindows()
サンプル3:サンプル2で録画したファイル'test.m4v'を再生する。終了はCtrl+C.
import cv2 import time vFile = 'test.m4v' cap = cv2.VideoCapture(vFile) fps = cap.get(cv2.CAP_PROP_FPS) try: while cap.isOpened(): ret, frame = cap.read() if ret == True: cv2.imshow('a',frame) time.sleep(1/fps) cv2.waitKey(1) except KeyboardInterrupt: cap.release() cv2.destroyAllWindows()
*1:opencv インストール windows 10 - Google 検索
opencv インストール Raspberry Pi - Google 検索
*2:python インストール windows 10 - Google 検索
python インストール Raspberry Pi - Google 検索
*3:OpenCVのVideoCapture()クラスを使っているので、Raspberry Pi の Picamera では動作しない。ラズパイにUSB接続のカメラを繋げばOK.