-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathcapture_video.py
118 lines (78 loc) · 3.19 KB
/
capture_video.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#####################################################################
# Example : generic interface example for video processing from a video file
# specified by filename or from an attached web camera
# example test videos avilable from:
# http://camendesign.co.uk/code/video_for_everybody/test.html
# Author : Toby Breckon, [email protected]
# Copyright (c) 2015 School of Engineering & Computing Science,
# Copyright (c) 2019 Dept Computer Science,
# Durham University, UK
# License : LGPL - http://www.gnu.org/licenses/lgpl.html
#####################################################################
import cv2
import argparse
import sys
#####################################################################
keep_processing = True
# parse command line arguments for camera ID or video file
parser = argparse.ArgumentParser(
description='Perform ' +
sys.argv[0] +
' example operation on incoming camera/video image')
parser.add_argument(
"-c",
"--camera_to_use",
type=int,
help="specify camera to use",
default=0)
parser.add_argument(
"-r",
"--rescale",
type=float,
help="rescale image by this factor",
default=1.0)
args = parser.parse_args()
#####################################################################
# define video capture object
cap = cv2.VideoCapture()
# define display window name
window_name = "Live Camera Input" # window name
# if file is present try to read video_file
# otherwise default to capture from attached H/W camera
if ((cap.open("video.avi")) or (cap.open(args.camera_to_use))):
# create window by name (as resizable)
cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
while (keep_processing):
# if video file or camera successfully open then read frame from video
if (cap.isOpened):
ret, frame = cap.read()
# when we reach the end of the video (file) exit cleanly
if (ret == 0):
keep_processing = False
continue
# rescale if specified
if (args.rescale != 1.0):
frame = cv2.resize(
frame, (0, 0), fx=args.rescale, fy=args.rescale)
# *** do any processing here ****
# display image
cv2.imshow(window_name, frame)
# start the event loop - essential
# cv2.waitKey() is a keyboard binding function (argument is the time in
# ms). It waits for specified milliseconds for any keyboard event.
# If you press any key in that time, the program continues.
# If 0 is passed, it waits indefinitely for a key stroke.
# (bitwise and with 0xFF to extract least significant byte of
# multi-byte response)
# wait 40ms (i.e. 1000ms / 25 fps = 40 ms)
key = cv2.waitKey(40) & 0xFF
# It can also be set to detect specific key strokes by recording which
# key is pressed
# e.g. if user presses "x" then exit
if (key == ord('x')):
keep_processing = False
# close all windows
cv2.destroyAllWindows()
else:
print("No video file specified or camera connected.")
#####################################################################