You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.1 KiB
Python

#!/usr/bin/env python
from __future__ import print_function
import cv2, os, sys, time
import numpy as np
from argparse import ArgumentParser
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
while True:
ret, prev = cam.read()
prevgray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)
if prevgray.shape == (args.height, args.width):
break
count = 0
try:
while True:
ret, frame = cam.read()
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
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()