读取视频
import cv2
# Create a video capture object, in this case we are reading the video from a file
vid_capture = cv2.VideoCapture('videos/test.avi')
# Reading an Image Sequence
# vid_capture = cv2.VideoCapture('Resources/Image_sequence/Cars%04d.jpg')
if not vid_capture.isOpened():
print("Error opening the video file")
# Read fps and frame count
else:
# Get frame rate information
# You can replace 5 with CAP_PROP_FPS as well, they are enumerations
fps = vid_capture.get(5)
print('Frames per second : ', fps, 'FPS')
# Get frame count
# You can replace 7 with CAP_PROP_FRAME_COUNT as well, they are enumerations
frame_count = vid_capture.get(7)
print('Frame count : ', frame_count)
while vid_capture.isOpened():
# vid_capture.read() methods returns a tuple, first element is a bool
# and the second is frame
ret, frame = vid_capture.read()
if ret:
cv2.imshow('Frame', frame)
# 20 is in milliseconds, try to increase the value, say 50 and observe
key = cv2.waitKey(20)
if key == ord('q'):
break
else:
break
# Release the video capture object
vid_capture.release()
cv2.destroyAllWindows()
These are the main functions in OpenCV video I/O that we are going to discuss in this blog post:
- cv2.VideoCapture – Creates a video capture object, which would help stream or display the video.
- cv2.VideoWriter – Saves the output video to a directory.
- In addition, we also discuss other needed functions such as cv2.imshow(), cv2.waitKey() and the get() method which is used to read the video metadata such as frame height, width, fps etc.
现在让我们看一下如何写视频。
import cv2
url = "http://YourIp/video"
vid_capture = cv2.VideoCapture(url)
# Obtain frame size information
frame_width = int(vid_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(vid_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
frame_size = (frame_width, frame_height)
fps = 20
# Initialize video writer object
output = cv2.VideoWriter('videos/output_video_from_file.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 20, frame_size)
while vid_capture.isOpened():
# vid_capture.read() methods returns a tuple, first element is a bool
# and the second is frame
ret, frame = vid_capture.read()
if not ret:
print('Stream disconnected')
break
# Write the frame to the output files
output.write(frame)
cv2.imshow('frame', frame)
# 30 is in milliseconds, try to increase the value, say 50 and observe
if cv2.waitKey(30) & 0xFF == ord('q'):
break
output.release()
vid_capture.release()
cv2.destroyAllWindows()
文章出处登录后可见!
已经登录?立即刷新