LearnOpenCV – Reading and Writing Videos

读取视频

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:

  1. cv2.VideoCapture – Creates a video capture object, which would help stream or display the video.
  2. cv2.VideoWriter – Saves the output video to a directory.
  3. 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()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年5月31日
下一篇 2022年5月31日

相关推荐