import cv2import numpy as npcap = cv2.VideoCapture(0) # 第一个摄像头if not cap.isOpened(): print("can not open camera") exit()while True: # 逐帧捕获 ret, frame = cap.read() # 如果精确读取帧,ret为True if not ret: print("Can't receive frame (stream end?). Exiting ...") break # 将当前帧转换为灰度图 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 显示结果帧 cv2.imshow('frame', gray) if cv2.waitKey(1) == ord('q'): break # 完成所有操作后,开释捕获器cap.release()cv2.destroyAllWindows()
cap.read() 返回布尔值( True / False )。如果精确读取了帧,它将为 True 。因此,你可以通过检讨此返回值来检讨视频的结尾。 有时,cap可能尚未初始化捕获。在这种情形下,此代码显示缺点。你可以通过cap.isOpened()方法检讨它是否已初始化。如果是 True ,那么确定是打开的。否则,利用cap.open()打开它。还可以利用 cap.get(propId) 方法访问该视频的某些功能,个中propId是0到18之间的一个数字。每个数字表示视频的属性(如果适用于该视频),并且可以显示完全的详细信息在这里看到:cv2::VideoCapture::get()。个中一些值可以利用cap.set(propId,value)进行修正。 value是想要的新值。从文件播放视频
它与从相机捕获相同,只是用视频文件名变动摄像机索引。其余,在显示框架时,请利用适当的韶光 cv.waitKey() 。如果太小,则视频将非常快,但如果设置得太大,则视频将变得很慢。正常情形下25毫秒就可以了。
import cv2import numpy as npcap = cv2.VideoCapture('vtest.avi')while cap.isOpened(): ret, frame = cap.read() if not ret: print("Can't receive frame (stream end?). Exiting ...") break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('frame', gray) if cv2.waitKey(1) == ord('q'): breakcap.release()cv2.destroyAllWindows()
保存视频
捕捉一个视频,一帧一帧地处理, 如果想要保存这个视频。对付图像,它非常大略,只需利用 cv2.imwrite()。但是对付视频而言,这里还须要做一些事情。首先创建一个 VideoWriter 工具。该当指定输出文件名(例如: output.avi)。然后该当指定 FourCC 代码以及通报帧率的数量和帧大小。末了一个是颜色标志。如果为True ,编码器期望颜色帧,否则它与灰度帧一起事情。FourCC:http://en.wikipedia.org/wiki/FourCC 是用于指定视频编解码器的4字节代码。可用代码列表可在fourcc.org中:http://www.fourcc.org/codecs.php 找到。它取决于平台。遵照编解码器来说效果很好。
FourCC代码作为MJPG的 cv2.VideoWriter_fourcc('M','J','P','G') or cv2.VideoWriter_fourcc('MJPG') 通报。在从摄像机捕获的代码下面,沿垂直方向翻转每一帧并保存。

import cv2import numpy as npcap = cv2.VideoCapture(0)# 定义编解码器并创建VideoWriter工具fourcc = cv2.VideoWriter_fourcc('XVID')out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))while cap.isOpend(): ret, frame = cap.read() if not ret: print("Can't receive frame (stream end?). Exiting ...") break frame = cv2.flip(frame, 0) # 写翻转的框架 out.write(frame) cv2.imshow('frame', frame) if cv2.waitKey(1) == ord('d'): break# 完成事情后开释所有内容cap.release()out.release()cv2.destroyAllWindows()