摄像头捕获视频简单的来说就是捕获每一帧图片
可以用如下的方式来创建: cap = cv2.VideoCapture(0)
然后可以用cap.read()来查看帧数是否读取正确,这里的cap是你创建的VideoCapture对象,cap.read()会返回一个元组。
效果图如下
(True, array([[[ 77, 96, 85],
[ 81, 99, 88],
[ 81, 99, 88],
...,
[ 41, 59, 62],
[ 44, 58, 59],
[ 43, 57, 58]],
[[ 80, 94, 84],
[ 81, 95, 85],
[ 83, 96, 86],
...,
[ 43, 59, 60],
[ 48, 62, 61],
[ 46, 59, 58]],
[[ 84, 95, 85],
[ 85, 96, 86],
[ 87, 95, 88],
...,
[ 41, 57, 58],
[ 45, 61, 59],
[ 43, 60, 58]],
...,
[[ 98, 85, 52],
[ 98, 85, 52],
[ 99, 83, 53],
...,
[ 93, 103, 88],
[ 95, 104, 94],
[ 94, 103, 93]],
[[ 91, 78, 47],
[ 91, 78, 47],
[ 89, 76, 52],
...,
[ 95, 105, 92],
[ 94, 105, 95],
[ 94, 105, 95]],
[[ 80, 70, 44],
[ 78, 68, 41],
[ 70, 61, 41],
...,
[ 91, 105, 92],
[ 89, 105, 94],
[ 89, 105, 94]]], dtype=uint8))
opencv中有一个常用的颜色转换函数cv2.cvtColor()
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()
参数 | 值 | 功能/意义 |
---|---|---|
CV_CAP_PROP_POS_MSEC | 0 | 视频文件的当前位置(以毫秒为单位)或视频捕获时间戳。 |
CV_CAP_PROP_POS_FRAMES | 1 | 基于0的索引将被解码/捕获下一帧。 |
CV_CAP_PROP_POS_AVI_RATIO | 2 | 视频文件的相对位置:0 - 电影的开始,电影的1 - 结束。 |
CV_CAP_PROP_FRAME_WIDTH | 3 | 视频每一帧的宽。 |
CV_CAP_PROP_FRAME_HEIGHT | 4 | 视频每一帧的高。 |
CV_CAP_PROP_FPS | 5 | 视频的帧速。 |
CV_CAP_PROP_FOURCC | 6 | 4个字符表示的视频编码器格式。 |
CV_CAP_PROP_FRAME_COUNT | 7 | 视频的帧数。 |
CV_CAP_PROP_FORMAT | 8 | byretrieve()返回的Mat对象的格式。 |
CV_CAP_PROP_MODE | 9 | 指示当前捕获模式的后端特定值。 |
CV_CAP_PROP_BRIGHTNESS | 10 | 图像的亮度(仅适用于相机)。 |
CV_CAP_PROP_CONTRAST | 11 | 图像对比度(仅适用于相机)。 |
CV_CAP_PROP_SATURATION | 12 | 图像的饱和度(仅适用于相机)。 |
CV_CAP_PROP_HUE | 13 | 图像的色相(仅适用于相机)。 |
CV_CAP_PROP_GAIN | 14 | 图像的增益(仅适用于相机)。 |
CV_CAP_PROP_EXPOSURE | 15 | 曝光(仅适用于相机)。 |
CV_CAP_PROP_CONVERT_RGB | 16 | 表示图像是否应转换为RGB的布尔标志。 |
CV_CAP_PROP_WHITE_BALANCE | 17 | 目前不支持 |
CV_CAP_PROP_RECTIFICATION | 18 | 立体摄像机的整流标志(注意:只有当前支持DC1394 v 2.x后端) |
文件中播放视频和摄像头捕获视频一样,只是我们要将索引号改为视屏文件的名字,在播放每一帧的时候,使用cv2.waitKey()来设置合适的持续时间,通常情况下,25毫秒就够了。代码如下,只需要修改VideoCapture的值便可。
import numpy as np
import cv2
cap = cv2.VideoCapture('7D8C0161054035F6A30F0342C237F6D4.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
if frame is None:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
我们也可以设置isColor标签,如果设置为True那么就是每一帧的图片都是彩色。
下面这段代码就是捕捉摄像头的视频并且保存他
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
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) //如果你需要将视频倒转之后保存,那么你可以加入这句代码
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()