在对图像进行操作的过程中,经常需要使用摄像头进行拍照和录制视频。使用 OpenCV 提供的 VideoCapture()函数、read()函数、imwrite()函数、VideoWriter()函数实现拍照和录制视频功能。
保存某一帧的图像:
python
# 导入openCV
import cv2
# 实例化一个摄像头
cap = cv2.VideoCapture(0)
# 判断摄像头是否打开
if cap.isOpened():
while True:
# 读取摄像头的帧
ret,frame = cap.read()
# 显示读取到的摄像头的帧画面图像
cv2.imshow("video-test",frame)
key = cv2.waitKey(10)
# 按下ESC键退出程序
if key == 27:
break
# 按下s键保持当前帧图像
if key == ord("s"):
cv2.imwrite("images/video_frame.jpg",frame)
cap.release()
cv2.destroyAllWindows()

保存视频:
python
import cv2
# 实例化摄像头
cap = cv2.VideoCapture(0)
if cap.isOpened():
# 设置视频格式
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
out = cv2.VideoWriter('images/output.avi',fourcc,1,(640,480))
# 保存视频
while True:
ret,frame = cap.read()
out.write(frame)
cv2.imshow('video',frame)
if cv2.waitKey(10) == 27:
break
cap.release()
out.release()
cv2.destroyAllWindows()

1. VideoCapture类
cv2.VideoCapture类可以简单、快捷地处理视频,它既能处理视频文件又能处理摄像头信息。cv2.VideoCapture类的常用函数包括初始化、打开、帧捕获、释放、属性设置等。
(1)构造函数:cv2.VideoCapture()
作用:用于打开摄像头并完成摄像头的初始化工作。
语法格式:捕获对象=cv2.VideoCapture("摄像头ID号")
"摄像头ID号"就是摄像头的ID号码,其默认值为-1,表示随机选取一个摄像头;如果有多个摄像头,则用数字"0"表示第1个摄像头,用数字"1"表示第2个摄像头,以此类推。
如果只有一个摄像头,既可以使用"0",也可以使用"-1"作为摄像头ID号。
代码示例:cap = cv2.VideoCapture(0)。
返回值为"捕获对象"
(2)判断当前的摄像头是否初始化成功函数:cv2.VideoCapture.isOpened()
作用:判断当前的摄像头是否初始化成功。
返回值:
成功,返回值retval为True;
不成功,返回值retval为False。
(3)打开摄像头函数:cv2.VideoCapture.open()
作用:如果摄像头初始化失败,可以使用函数cv2.VideoCapture.open()打开摄像头。
语法格式:retval = cv2.VideoCapture.open( index )
Index:摄像头ID号;
Retval:返回值,当摄像头(或者视频文件)被成功打开时,返回值为True。
(4)捕获帧函数:cv2.VideoCapture.read()
作用:从摄像头中捕获帧信息。
语法格式:retval, image=cv2.VideoCapture.read()
Image:返回的捕获到的帧,如果没有帧被捕获,则该值为空;
Retval:表示捕获是否成功,如果成功则该值为True,不成功则为False。
(5)释放摄像头函数:cv2.VideoCapture.release()
作用:关闭摄像头。
语法格式:None=cv2.VideoCapture.release()
代码示例:cap = cv2.VideoCapture(0)
cap. release()
2.保存图像函数:cv2.imwrite()
作用:将图像以指定的格式图像保存。
语法格式:cv2.imwrite(filename, image)
filename:代表文件名的字符串。文件名必须包含图像格式,例如.jpg,.png等;
image: 就是要保存的图像。
代码示例:img = cv2.imwrite("D:\car.jpg",img) ,将img图像对象以car.jpg为文件名保存到D盘下。
3. 保存视频函数:cv2.VideoWriter()
作用:将图片序列保存成视频文件,也可以修改视频的各种属性,还可以对视频类型进行转换;
语法格式: = cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor])
filename:指定输出目标视频的存放路径和文件名。如果指定的文件名已经存在,则会覆盖这个文件。
fourcc:视频编/解码类型(格式)。用cv2.VideoWriter_fourcc()来指定视频编解码格式。fourcc意为四字符代码(Four-Character Codes),该编码由四个字符组成,下面是VideoWriter_fourcc对象一些常用的参数,注意:字符顺序不能弄混。
cv2.VideoWriter_fourcc('M','P','4','V'),MPEG-4编码,文件名后缀为.mp4;
cv2.VideoWriter_fourcc('X','2','6','4'),MPEG-4编码,文件名后缀为.mp4;
cv2.VideoWriter_fourcc('I', '4', '2', '0'),YUV编码类型,文件名后缀为.avi;
cv2.VideoWriter_fourcc('P', 'I', 'M', 'I'),MPEG-1编码类型,文件名后缀为.avi;
cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'),MPEG-4编码类型,文件名后缀为.avi;
cv2.VideoWriter_fourcc('T', 'H', 'E', 'O'),Ogg Vorbis,文件名后缀为.ogv;
cv2.VideoWriter_fourcc('F', 'L', 'V', '1'),Flash视频,文件名后缀为.flv;
代码示例:fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
fourcc = cv2.VideoWriter_fourcc(*'MP4V')
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
指定视频编解码格式为mp4格式,以上四行代码功能相同。
fps:要保存的视频的帧率。
frameSize:要保存的文件的画面尺寸。
isColor:指示是黑白画面还是彩色的画面。
4.实例:
python
import cv2
#第一步:实例化摄像头
cap = cv2.VideoCapture(0)
#第二步:设置视频窗口大小
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
#第三步:设置视频类型
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter('images/test.mp4',fourcc,20,(width,height))
#第四步:保存视频
while True:
ret,frame = cap.read()
if ret:
out.write(frame)
cv2.imshow('capture',frame)
if cv2.waitKey(25) & 0xFF == ord('q'): #按键盘q键退出
break
else:
continue
cap.release()
out.release()
cv2.destroyAllWindows()