#!/usr/bin/env python from __future__ import print_function import cv2, os, sys, time import numpy as np from argparse import ArgumentParser from picamera.array import PiRGBArray from picamera import PiCamera p = ArgumentParser("") p.add_argument("--video", type=int, default=0, help="video, default: 0") p.add_argument("--output", default=None, help="path to save movie, default: None (show live)") p.add_argument("--width", type=int, default=640, help="pre-detect resize width") p.add_argument("--height", type=int, default=480, help="pre-detect resize height") p.add_argument("--fourcc", default="XVID", help="MJPG,mp4v,XVID") p.add_argument("--framerate", type=float, default=25, help="output frame rate") p.add_argument("--show", default=False, action="store_true") p.add_argument("--frames", type=int, default=100) args = p.parse_args() fourcc = None cam = cv2.VideoCapture(args.video) cam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, args.width) cam.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, args.height) if args.output: try: fourcc = cv2.cv.CV_FOURCC(*args.fourcc) except AttributeError: fourcc = cv2.VideoWriter_fourcc(*args.fourcc) out = cv2.VideoWriter() out.open(args.output, fourcc, args.framerate, (args.width, args.height)) else: out = None print ("Starting camera", file=sys.stderr) cam = PiCamera() framesize = (160, 128) cam.resolution = framesize cam.framerate = 32 rawCapture = PiRGBArray(cam, size=framesize) # allow the camera to warmup time.sleep(0.25) count = 0 try: # while True: # ret, frame = cam.read() for frame in cam.capture_continuous(rawCapture, format="bgr", use_video_port=True): # print "GRAB FRAME" frame = frame.array gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ret, t= cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) frame = cv2.cvtColor(t, cv2.COLOR_GRAY2BGR) # flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0) # prevgray = gray # clear the stream in preparation for the next frame (important for picamera!) rawCapture.truncate(0) if out != None: out.write(frame) count += 1 if args.show: cv2.imshow('display', frame) if cv2.waitKey(5) & 0xFF == ord('q'): break if args.frames != None: if (count >= args.frames): break except KeyboardInterrupt: pass print ("\nCleaning up... Wrote", count, "frames") if out: out.release() if args.show: cv2.destroyAllWindows()