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()
网友评论