计算机视觉处理----OpenCV(从摄像头采集视频、视频处理与视频录制)

一、采集视频

VideoCapture 用于从视频文件、摄像头或其他视频流设备中读取视频帧。它可以捕捉来自 多种源的视频。

cv2.VideoCapture()

打开摄像头或视频文件。

复制代码
cap = cv2.VideoCapture(0)  # 0表示默认摄像头,1是第二个摄像头,传递视频文件路径也可以

cv.VideoCapture(		) ->	<VideoCapture object>
cv.VideoCapture(	filename[, apiPreference]	) ->	<VideoCapture object>
cv.VideoCapture(	filename, apiPreference, params	) ->	<VideoCapture object>
cv.VideoCapture(	index[, apiPreference]	) ->	<VideoCapture object>
cv.VideoCapture(	index, apiPreference, params	) ->	<VideoCapture object>
参数 描述
0 表示默认摄像头(电脑上通常是第一个摄像头)。
1 表示第二个摄像头(如果有的话)。
文件路径 如果你要打开本地视频文件,传入视频文件路径。

cap.isOpened()

检查摄像头或视频文件是否成功打开。

复制代码
cv.VideoCapture.isOpened(		) ->	retval

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 如果已初始化视频捕获,则返回 true。 |
| 如果上次对 VideoCapture 构造函数或 VideoCapture::open() 的调用成功,则该方法返回 true。 |

python 复制代码
if not cap.isOpened():
 print("无法打开摄像头")
 exit()

cap.read()

读取视频流中的一帧。

python 复制代码
ret, frame = cap.read()

| 参数 | 描述 |
| ret | 布尔值,表示读取是否成功 |

frame 当前帧图像(numpy 数组),如果读取成功,返回该帧图像数据。
python 复制代码
import cv2
# 打开摄像头
cap = cv2.VideoCapture(0)

# 检查摄像头是否打开
if not cap.isOpened():
    print("摄像头打开失败")
    exit()

while True:
    # 读取每一帧
    ret,frame = cap.read()

    # 判断图像是否读取成功
    if not ret:
        print("图像读取失败")
        break

    # 显示图像
    cv2.imshow("frame",frame)

    if cv2.waitKey(1) == ord('q'):
        break

# 释放摄像头
cap.release()
cv2.destroyAllWindows()

二、视频录制

cv2.VideoWriter 和 cv2.VideoWriter_fourcc 是 OpenCV 中用于视频录制的重要函数,它们结合使用来 捕捉和保存视频流。

cv2.VideoWriter_fourcc

cv2.VideoWriter_fourcc 用来设置视频文件的编码格式。OpenCV 支持多种视频编码方式,通过这 个函数,你可以指定一个四字符代码(FOURCC),以告知 OpenCV 如何压缩视频数据。 每种编码方式对应一个四字符代码(如 'XVID' , 'MJPG' )。

python 复制代码
cv2.VideoWriter_fourcc(*'FOURCC')

| 参数 | 描述 |
| 'XVID' | 一种常用的 MPEG-4 视频编码格式,支持较好的压缩效率和质量。 |
| 'MJPG' | Motion JPEG,一种基于 JPEG 图像编码的视频格式,压缩率较低,但图像质量较好。 |
| 'H264' | 一种高效的视频编码标准,提供高压缩率和较高的图像质量(通常需要额外的库,如ffmpeg) |
| 'DIVX' | 与 'XVID' 类似,基于 MPEG-4 的编码格式。 |

'MP4V' 用于 .mp4 文件的 MPEG-4 视频编码格式。

cv2.VideoWriter

cv2.VideoWriter 用于创建一个视频写入对象,用于将帧写入到视频文件中。该对象需要指定编 码格式、输出文件名、帧率和视频尺寸等信息。

python 复制代码
cv.VideoWriter(		) ->	<VideoWriter object>
cv.VideoWriter(	filename, fourcc, fps, frameSize[, isColor]	) ->	<VideoWriter object>
cv.VideoWriter(	filename, apiPreference, fourcc, fps, frameSize[, isColor]	) ->	<VideoWriter object>
cv.VideoWriter(	filename, fourcc, fps, frameSize, params	) ->	<VideoWriter object>
cv.VideoWriter(	filename, apiPreference, fourcc, fps, frameSize, params	) ->	<VideoWriter object>

| 参数 | 描述 |
| filename | 输出视频文件的名称。 |
| fourcc | 用于压缩帧的编解码器的 4 个字符代码。例如,VideoWriter::fourcc('P','I','M','1') 是 MPEG-1 编解码器,VideoWriter::fourcc('M','J','P','G') 是 motion-jpeg 编解码器等。代码列表可以在 MSDN 页面或通过 fourcc 站点的此页面获取,以获取更完整的列表)。带有 MP4 容器的 FFMPEG 后端原生使用其他值作为 fourcc 代码:请参阅 ObjectType,因此您可能会收到来自 OpenCV 的有关 fourcc 代码转换的警告消息。 |
| fps | 创建的视频流的帧率。 |
| frameSize | 视频帧的大小。 |

isColor 如果它不为零,则编码器将期望并编码彩色帧,否则它将与灰度帧一起使用。
python 复制代码
import cv2

# 打开摄像头
cap = cv2.VideoCapture(0)

# 检查摄像头是否打开
if not cap.isOpened():
    print("打开摄像头失败")
    exit()


# 设置视频编码
fourcc = cv2.VideoWriter_fourcc(*"XVID")
# 设置视频保存位置
out = cv2.VideoWriter("output.avi",fourcc,20.0,(640,480))

while True:
    # 读取每一帧
    ret,frame = cap.read()

    # 判断图像是否读取成功
    if not ret:
        print("图像读取失败")
        break

    # 把读取视频帧写入视频文件
    out.write(frame)

    # 显示图像
    cv2.imshow("frame",frame)

    if cv2.waitKey(1) == ord('q'):
        break

# 释放摄像头
cap.release()
out.release()
cv2.destroyAllWindows()
相关推荐
码途漫谈几秒前
Easy-Vibe开发篇阅读笔记(四)——前端开发之结合 Agent Skills 美化界面
人工智能·笔记·ai·开源·ai编程
smj2302_796826523 分钟前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
易连EDI—EasyLink6 分钟前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
冬奇Lab18 分钟前
RAG 系列(二):用 LangChain 搭建你的第一个 RAG Pipeline
人工智能·langchain·llm
学习论之费曼学习法32 分钟前
多模态大模型实战:用 GPT-4o API 打造 AI 助手,能看、能听、能说!
人工智能
阿正呀39 分钟前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
昨夜见军贴061640 分钟前
IACheck与AI报告审核,开启供应商资质核验报告审核新篇章
人工智能
m0_726365831 小时前
Ai漫剧系统 几分钟,让AI 把一篇小说变成了一部漫剧成片:从剧本到视频的全流程系统实现
人工智能·语言模型·ai作画·音视频
2501_901200531 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
AIwenIPgeolocation1 小时前
出海应用合规与风控平衡术:可信ID的全球安全实践
人工智能·安全