官方的文档:
Goal
- Learn to read video, display video and save video.
- Learn to capture from Camera and display it.
- You will learn these functions : cv2.VideoCapture(), cv2.VideoWriter()
目的有3个:
1. 学习读取、显示、以及保存视频文件
2. 学习从摄像头捕捉视频并显示、
3. 学习cv2.VideoCapture(), cv2.VideoWriter()这两个函数
通常,我们必须用相机捕捉实时流。OpenCV提供了一个非常简单的接口。让我们从摄像机中获取一个视频(如,笔记本的摄像头),将它转换成灰度视频并显示出来。只是一个简单的任务就可以开始了。
要捕获视频,需要创建一个VideoCapture对象。它的参数可以是设备索引,也可以是视频文件的名称。设备索引只是指定哪个摄像机的数字。正常情况下,我们只有一台相机,所以只需传递0(或-1)。您可以通过传递1来选择第二个相机等等。在那之后,你可以一条条地捕捉。但最后别忘了释放抓捕。
代码:
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
# 一帧一帧的去捕捉视频
ret, frame = cap.read()
# 在此处可以对每帧捕捉的视频进行操作。
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 将每帧处理完的图像显示出来
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 结束之后,释放捕捉,销毁窗口
cap.release()
cv2.destroyAllWindows()
PS:
cap.read() 返回一个布尔类型值(True/false)。如果frame被正确地读取,则为True。我们可以通过检查这个返回值来检查视频是否加载正确。
有时,Cap可能没有初始化捕获。在这种情况下,此代码显示错误。您可以检查它是否由 cap.isOpened()方法初始化。如果返回True,否则,使用cap.open()打开它。
您还可以使用cap.get(propId)方法访问该视频的一些功能,其中propId是从0到18之间的一个数字。每个数字表示视频的一个属性(如果它适用于该视频),完整的详细信息看下图(我就不一一介绍了,有兴趣的同学可以自己翻译一下)。其中一些值可以使用cap.set(propId,value)进行修改。值是您想要的新值。
例如,我可以通过cap.get(3)和cap.get(4)检查帧的宽度和高度。默认情况下,它给我640x480。但是我想把它修改成320x240。只需使用ret=cap.set(3,320)和ret=cap.set(4,240)。
如果遇到错误,请确保使用任何其他相机应用程序相机工作正常。(也就是说看看是不是你的摄像头有问题了- -#!)