3-用摄像头拍摄图像及视频

​ 在对图像进行操作的过程中,经常需要使用摄像头进行拍照和录制视频。使用 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()
相关推荐
AI街潜水的八角2 小时前
基于YOLO26苹果水果缺陷检测系统1:苹果水果缺陷检测数据集说明(含下载链接)
人工智能·深度学习·神经网络
Solar20252 小时前
工程材料企业如何借助数字化工具突破获客瓶颈:方法论与实践路径
大数据·人工智能·物联网
audyxiao0012 小时前
会议热点扫描|通过智能交通顶级会议IEEE IV 2025看自动驾驶领域研究热点
人工智能·机器学习·自动驾驶·热点分析·ieee iv
茶栀(*´I`*)2 小时前
【视觉探索】OpenCV 全景导论:从数字图像基石到核心模块体系
人工智能·opencv·计算机视觉
喝可乐的希饭a2 小时前
AI Agent 的九种设计模式
人工智能·设计模式
春日见2 小时前
Docker中如何删除镜像
运维·前端·人工智能·驱动开发·算法·docker·容器
枫斗.2 小时前
Spring AI 自定义 ChatClient Bean 注入冲突问题详解
java·人工智能·spring
云智慧AIOps社区2 小时前
云智慧Cloudwise X1 轮足机器人重磅发布:跨楼层全自动巡检,重塑数据中心运维范式
运维·人工智能·机器人·自动化
码农三叔2 小时前
(5-3)骨架、外壳与轻量化设计:外壳设计与人机交互安全
人工智能·架构·机器人·人机交互·人形机器人