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()
相关推荐
小超同学你好6 分钟前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力25 分钟前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo26 分钟前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
xiaozhazha_30 分钟前
效率提升80%:2026年AI CRM与ERP深度集成的架构设计与实现
人工智能
枫叶林FYL31 分钟前
【自然语言处理 NLP】7.2.2 安全性评估与Constitutional AI
人工智能·自然语言处理
AI人工智能+38 分钟前
基于高精度身份证OCR识别、炫彩活体检测及人脸比对技术的人脸核身系统,为通信行业数字化转型提供了坚实的安全底座
人工智能·计算机视觉·人脸识别·ocr·人脸核身
小敬爱吃饭1 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
宸津-代码粉碎机1 小时前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
老兵发新帖1 小时前
Hermes:比openclaw更好用的智能体?
人工智能
俊哥V1 小时前
每日 AI 研究简报 · 2026-04-09
人工智能·ai