OpenCV-Python视频处理入门

1. 捕获视频

  通常我们需要通过摄像头事实捕获事物的动态,而OpenCV提供了一个非常简单的接口。下面我们展示一个从摄像头捕获视频,并将其转换成灰度视频的例子。示例代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Feb 10 12:25:10 2018

@author: Quan
"""

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

  为了获取视频,首先需要使用函数cv2.VideoCapture(0)创建一个VideoCapture对象。该函数的参数可以是设备索引,也可以是视频文件。通常如果是当前设备自带的摄像头,可以设置参数为0或-1,如果是第二个摄像头,可以设置成2等等。然后我们就可以一帧一帧的获取视频,但是最后不要忘了释放这个capture
cap.read()返回一个布尔类型的结果(True/False)。如果读取帧成功,返回True,否则返回False。有时候我们可以调用cap.isOpened()方法来检查cap有没有初始化,如果没有,那么cap.read()方法会报错,这个时候需要我们先调用方法```cap.open()``'来开启capture。

2. 播放视频

  播放视频与从摄像头捕获视频一样,只需要将 cv2.VideoCapture()的参数设定为指定的视频文件即可。示例如下:

import numpy as np
import cv2

cap = cv2.VideoCapture('baby.mp4')

while(cap.isOpened()):
    ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('baby',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

3. 保存视频

  当我们一帧一帧地捕获一段视频,并需要将其保存在本地时,我们需要做如下操作:
  首先,我们需要创建一个VideoWriter对象,并显式地指定它的编解码器(FourCC)、fps(frames per second)、视频尺寸,以及是否彩色(isColor)等。FourCC是一种用来表示视频编解码器的四个字节码,具体可以参考fourcc.org。

示例如下:

import numpy as np
import cv2

# 捕获摄像头
cap = cv2.VideoCapture(0)

# 定义编解码器,创建VideoWriter 对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)

        # write the flipped frame
        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

参考:
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video

你可能感兴趣的:(OpenCV-Python视频处理入门)