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()
相关推荐
秋邱几秒前
深度解析CANN与AIGC的核心联系:算力底座赋能生成式AI规模化落地
人工智能·aigc
一枕眠秋雨>o<2 分钟前
数学的底座:ops-math如何为AI计算注入确定性
人工智能
Henry-SAP6 分钟前
SAP(ERP)主要生产计划(MPS)业务视角解析
人工智能
猫头虎9 分钟前
2026年AI产业13大趋势预测:Vibe Coding创作者经济元年到来,占冰强专家解读AIGC未来图景
人工智能·开源·prompt·aigc·ai编程·远程工作·agi
程序员清洒9 分钟前
CANN模型部署:从云端到端侧的全场景推理优化实战
大数据·人工智能
deephub9 分钟前
LLM推理时计算技术详解:四种提升大模型推理能力的方法
人工智能·深度学习·大语言模型·推理时计算
lili-felicity14 分钟前
CANN性能调优与实战问题排查:从基础优化到排障工具落地
开发语言·人工智能
User_芊芊君子17 分钟前
HCCL高性能通信库编程指南:构建多卡并行训练系统
人工智能·游戏·ai·agent·测评
冻感糕人~17 分钟前
【珍藏必备】ReAct框架实战指南:从零开始构建AI智能体,让大模型学会思考与行动
java·前端·人工智能·react.js·大模型·就业·大模型学习
hopsky19 分钟前
openclaw AI 学会操作浏览器抓取数据
人工智能