用摄像头捕获视频
import cv2
cap = cv2.VideoCapture(
0)
while(
True):
ret, frame = cap.read()
cv2.imshow(
'frame',frame)
if cv2.waitKey(
1) &
0xFF == ord(
'q'):
break
cap.release()
cv2.destroyAllWindows()
cap.read() 返回两个值,先返回一个布尔值,如果视频读取正确,则为 True,如果错误,则为 False,也可用来判断是否到视频末尾。再返回一个值,为每一帧的图像,该值是一个三维矩阵cap.get(propId) 可以获取到视频的一些参数信息cap.set(propId,value) 可以设置新的值
0) CV_CAP_PROP_POS_MSEC 视频文件的当前位置,以毫秒为单位.
1) CV_CAP_PROP_POS_FRAMES 接下来要解码/捕获的帧的基于
0的索引。
2) CV_CAP_PROP_POS_AVI_RATIO 视频文件的相对位置:
0 - 电影的开始,电影的
1 - 结束。
3) CV_CAP_PROP_FRAME_WIDTH 视频流中帧的宽度。
4) CV_CAP_PROP_FRAME_HEIGHT 视频流中帧的高度.
5) CV_CAP_PROP_FPS 帧率.
6) CV_CAP_PROP_FOURCC 编解码器的
4个字符代码.
7) CV_CAP_PROP_FRAME_COUNT 视频文件中的帧数。
8) CV_CAP_PROP_FORMAT 通过retrieve()返回的Mat对象的格式。
9) CV_CAP_PROP_MODE 指示当前捕获模式的后端特定值。
10) CV_CAP_PROP_BRIGHTNESS 图像的亮度(仅适用于相机)。
11) CV_CAP_PROP_CONTRAST 图像对比(仅适用于相机).
12) CV_CAP_PROP_SATURATION 图像饱和度(仅适用于相机)。
14) CV_CAP_PROP_HUE 图像的色相(仅适用于相机)。
15) CV_CAP_PROP_GAIN 获取图像(仅适用于相机)。
16) CV_CAP_PROP_EXPOSURE 曝光(仅适用于相机)。
17) CV_CAP_PROP_CONVERT_RGB 指示其他图像应转换为RGB的布尔标志。
18) CV_CAP_PROP_WHITE_BALANCE 目前不支持
19) CV_CAP_PROP_RECTIFICATION 立体声整流标志相机(注意:仅支持DC1394 v
2.x后端)
从文件中播放视频
import cv2
cap = cv2.VideoCapture(
"E://test.mp4")
fps = cap.get(
5)
height,width = cap.get(
3),cap.get(
4)
print(
"帧率:",fps)
print(
"高度:",height)
print(
"宽度:",width)
cap.set(
0,
10000)
while(
True):
ret, frame = cap.read()
cv2.imshow(
'frame',frame)
if cv2.waitKey(
1) &
0xFF == ord(
'q'):
break
cap.release()
cv2.destroyAllWindows()
写视频
在我们捕获视频,并对每一帧都进行加工之后我们想要保存这个视频。对于图片很简单只需要使用 cv2.imwrite()。但对于视频来说就要多做点工作。 这次我们要创建一个 VideoWriter 的对象。我们应该确定一个输出文件的名字。接下来指定 FourCC 编码(下面会介绍)。播放频率和帧的大小也都需要确定。最后一个是 isColor 标签。如果是 True,每一帧就是彩色图,否则就是灰度图。 FourCC 就是一个 4 字节码,用来确定视频的编码格式。可用的编码列表 可以从fourcc.org查到。这是平台依赖的。
import cv2
cap = cv2.VideoCapture(
0)
fourcc = cv2.VideoWriter_fourcc(*
'XVID')
#指定 FourCC 编码,确定视频的编码格式
out = cv2.VideoWriter(
'output.avi',fourcc,
20.0, (
640,
480),True)
#创建一个 VideoWriter 的对象。
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
out.write(frame)
#将该帧图像写出
cv2.imshow(
'frame',frame)
if cv2.waitKey(
1)&
0xFF== ord(
"q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()