Python OpenCV library can be use to read a video, the video can be a live camera feed or a recorded video file. The below code is use to read a video from my laptop web cam.
Some explaination : at line 24 (cv2.waitKey(25) & 0xFF
==
ord('q')
) :
- waitKey return a 32 bit of the key that the user keyed. The 25 is 25 milliseconds(ms). If the argument is too big, like 500, you will notice a lag in the video due to the frame rate. 0 will freeze the video hence 0 is suitable for image.
- 0xFF is hexidecimal for 0b11111111. And is only needed if your machine is 64bit else (
cv2.waitKey(25)
==
ord('q')
is sufficient . So a AND operator between 32 bit and 8 bit will result in a 8 bit. ‘ord’ will get the binary for letter ‘q’. - So if user hit ‘q’ key, the AND operation will result in a 8 bit binary of letter ‘q’ . So LHS = RHS and therefore break the loop.
import numpy as np
import cv2
#cap = cv2.VideoCapture(r'C:\Users\Linawati\Documents\ACCS\OpenCV\VideoForVideoCapture.mp4')
cap = cv2.VideoCapture(0)
# Check if camera opened successfully
if (cap.isOpened()== False):
print("Error opening video stream or file")
# Read until video is completed
while(cap.isOpened()):
# Capture frame-by-frame, ret is boolean to check if there is frame
ret, frame = cap.read()
if ret == True:
# Display the resulting frame
cv2.imshow('Frame',frame)
# Press Q on keyboard to exit
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# Break the loop
else:
break
#Close video file or capturing device
cap.release()
# Closes all the frames
cv2.destroyAllWindows()
Output camera stream:

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
#Loop for video stream
while (True):
stream = cv2.waitKey(1) #Load video every 1ms and to detect user entered key
#Read from videoCapture stream and display
ret,frame = cap.read()
frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)
cv2.imshow("Frame", frame)
if stream & 0XFF == ord('q'): #Letter 'q' is the escape key
break #get out of loop
cap.release()
cv2.destroyAllWindows()
Reading from saved video file:
The code:
import numpy as np
import cv2
#Video must be in the same directory if exact path is not given
cap = cv2.VideoCapture(r'VideoForVideoCapture.mp4')
#metadata of video, extra..not necessary
fps = int(cap.get(cv2.CAP_PROP_FPS))
frame_number = cap.get(cv2.CAP_PROP_FRAME_COUNT)
video_time = frame_number/fps
print(fps)
print(frame_number)
print(video_time)
while True:
ret, img = cap.read()
#exit loop if video ends
if not ret:
break
#resize video to fit screen, slight skew in the x axis,
#to fit screen
img = cv2.resize(img, (0,0), fx=0.45, fy=0.5)
#Rotate video 90 deg clockwise
img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE )
cv2.imshow('Recorded Video',img)
#exit loop anytime u want by entering 'q' key
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()