首页 > 代码库 > Python-OpenCV教程-2
Python-OpenCV教程-2
OpenCV版本要求在2.3.1以上
本文主要介绍如何在Python中用OpenCV读取、保存和播放一段视频流以及用OpenCV来调用摄像头。
1.调用摄像头
为了捕捉摄像头的画面,我们首先要生成一个VideoCapture对象,这个对象的参数可以是设备号或者是视频文件的名称。设备号可以在/dev下查看,我的摄像头的设备名称是video0,所以设备号就是0。获得了VideoCapture对象后,我们就能通过这个对象的read函数来一帧一帧地获得图像了。
以下程序的效果是:从摄像头中获得图像,并把它转换成灰度图像,最后显示出来。
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()其中,cap.read()还会返回一个bool类型的值,它代表返回的这一帧图像是否是正确的。我们可以检查这个返回值来确定一段视频是否已经播放到头了。
有时,cap会无法初始化capture,如果我们要检查初始化是否正常,可以使用cap.isOpened()这个函数。如果返回True,则用cap.open()来打开。
我们还能通过cap.get(proId)来获得一些视频的属性,并且通过cap.set(proId,value)来修改某些属性。proId的取值范围是0到18。
举个例子,我们可以通过cap.get(3)和cap.get(4)来获得视频的帧宽度以及帧高度,然后通过get函数去修改它们。
2.播放一个视频文件
播放视屏文件的流程几乎和调用摄像头是一样的,但是我们在调用摄像头中有一个重要的东西没讲,那就是我们要为cv.waitKey()设置一个合适的延时,如果延时太小,那么视频就会很快,如果延时太大,那么视频就会变得很慢(用这个方法可以去看慢动作),通过设这个值为1是比较合适的。
import numpy as np import cv2 cap = cv2.VideoCapture('vtest.avi') while(cap.isOpened()): 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()
3,保存视频文件
保存视频文件的流程略微复杂,首先我们需要确定以下的一些参数:视频的FourCC格式、视频的尺寸、视频每秒的帧数以及视频的颜色。然后根据这些参数,我们生成一个VideoWriter对象来保存这段视频文件。
设置FourCC格式时,原文里采用了cv2.VideoWriter_fourcc()这个函数,但我在运行程序的时候显示这个函数不存在,所以我改用了
cv2.cv.CV_FOURCC这个函数。关于FourCC该采用哪种格式,请参考最下面的原文。
下面的范例代买从摄像头中捕捉视频,并把这个视频倒立以后进行保存。
翻译自http://docs.opencv.org/trunk/doc/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video
Python-OpenCV教程-2