OpenCV | 基于视频的基础操作

目录

  • [一. OpenCV 关于视频的基础操作](#一. OpenCV 关于视频的基础操作)
    • [1. cv.VideoCapture ( ) 读取摄像头 / 视频文件](#1. cv.VideoCapture ( ) 读取摄像头 / 视频文件)
    • [2. cv.VideoCapture ( ).set ( ) 设置视频属性](#2. cv.VideoCapture ( ).set ( ) 设置视频属性)
    • [3. cv.VideoCapture ( ).get ( ) 打印视频属性](#3. cv.VideoCapture ( ).get ( ) 打印视频属性)
    • [4. cv.VideoCapture ( ).read ( ) 读帧](#4. cv.VideoCapture ( ).read ( ) 读帧)
    • [5. capture.release ( ) 释放资源](#5. capture.release ( ) 释放资源)
    • [6. cv.VideoWriter ( ) 视频写入](#6. cv.VideoWriter ( ) 视频写入)

一. OpenCV 关于视频的基础操作

1. cv.VideoCapture ( ) 读取摄像头 / 视频文件

复制代码
	cv.VideoCapture ( )
	参数:
		参数是0时,默认打开笔记本的内置第一个摄像头
		参数是视频文件路径时,表示读取对应文件
python 复制代码
# 从摄像机获取视频
# 创建一个基于摄像头的视频读取流,给定基于第一个视频设备
capture =cv.VideoCapture(0)

# 视频文件读入
# 创建一个基于文件的视频读取流,给定基于第一个视频设备
capture = cv.VideoCapture("video1.avi")

2. cv.VideoCapture ( ).set ( ) 设置视频属性

复制代码
	cv.VideoCapture().set( )
	注意:
		实际参数会发生稍微的偏移
	作用:
		设置视频的宽度,高度,帧率,亮度,对比度等属性
	参数影响:
		这些属性可以影响视频处理的质量和速度
	参数设置:
		capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080) => 宽度
		capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960) => 高度
		capture.set(CV_CAP_PROP_FPS, 30) => 帧率 帧
		capture.set(CV_CAP_PROP_BRIGHTNESS, 1) => 亮度
		capture.set(CV_CAP_PROP_CONTRAST,40) => 对比度 40
		capture.set(CV_CAP_PROP_SATURATION, 50) => 饱和度 50
		capture.set(CV_CAP_PROP_HUE, 50) => 色调 50
		capture.set(CV_CAP_PROP_EXPOSURE, 50) => 曝光 50 获取摄像头参数

3. cv.VideoCapture ( ).get ( ) 打印视频属性

复制代码
	参数:
		cv.VideoCapture.get(0) / cv.CAP_PROP_POS_MSEC  视频文件的当前位置(播放)以毫秒为单位
		cv.VideoCapture.get(1) / cv.CAP_PROP_POS_FRAMES  基于以0开始的被捕获或解码的帧索引
		cv.VideoCapture.get(2) / cv.CAP_PROP_POS_AVI_RATIO  视频文件的相对位置(播放):0=电影开始,1=影片的结尾
		cv.VideoCapture.get(3) / cv.CAP_PROP_FRAME_WIDT  视频流的帧的宽度
		cv.VideoCapture.get(4) / cv.CAP_PROP_FRAME_HEIGHT  视频流的帧的高度
		cv.VideoCapture.get(5) / cv.CAP_PROP_FPS  帧速率
		cv.VideoCapture.get(6) / cv.CAP_PROP_FOURCC  编解码的4字-字符代码
		cv.VideoCapture.get(7) / cv.CAP_PROP_FRAME_COUNT  视频文件中的帧数
		cv.VideoCapture.get(8) / cv.CAP_PROP_FORMAT  返回对象的格式
		cv.VideoCapture.get(9) / cv.CAP_PROP_MODE  返回后端特定的值,该值指示当前捕获模式
		cv.VideoCapture.get(10) / cv.CAP_PROP_BRIGHTNESS  图像的亮度(仅适用于照相机)
		cv.VideoCapture.get(11) / cv.CAP_PROP_CONTRAST  图像的对比度(仅适用于照相机)
		cv.VideoCapture.get(12) / cv.CAP_PROP_SATURATION  图像的饱和度(仅适用于照相机)
		cv.VideoCapture.get(13) / cv.CAP_PROP_HUE  色调图像(仅适用于照相机)
		cv.VideoCapture.get(14) / cv.CAP_PROP_GAIN  图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
		cv.VideoCapture.get(15) / cv.CAP_PROP_EXPOSURE  曝光(仅适用于照相机)
		cv.VideoCapture.get(16) / cv.CAP_PROP_CONVERT_RGB  指示是否应将图像转换为RGB布尔标志
		cv.VideoCapture.get(17) / cv.CAP_PROP_WHITE_BALANCE  × 暂时不支持|
		cv.VideoCapture.get(18) / cv.CAP_PROP_RECTIFICATION  立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)
python 复制代码
capture =cv.VideoCapture(0)
# 未设置视频的宽度,高度
size = (int(capture.get(cv.CAP_PROP_FRAME_WIDTH)),
        int(capture.get(cv.CAP_PROP_FRAME_HEIGHT)))
print(size)  # (640, 480)
python 复制代码
capture =cv.VideoCapture(0)

# 设置视频的宽度,高度
success=capture.set(cv.CAP_PROP_FRAME_WIDTH, 1880)
if success:  # if成立时,success不等于0
    print("设置宽度成功")  # 设置宽度成功
success=capture.set(cv.CAP_PROP_FRAME_HEIGHT, 1480)
if success:
    print("设置高度成功")  # 设置长度成功

# 打印属性
size = (int(capture.get(cv.CAP_PROP_FRAME_WIDTH)),
        int(capture.get(cv.CAP_PROP_FRAME_HEIGHT)))
print(size)  # (1280, 720)

4. cv.VideoCapture ( ).read ( ) 读帧

复制代码
	cv.VideoCapture ( ).read ( )
	作用:
		从视频流中读取1帧图像
		【注意】按帧读取视频
	返回值:
		第一个返回值是布尔型:
			读取正确,则返回True,
			读取失败或读取视频结尾,则会返回False
		第二个返回值是每一帧的图像:
			这里图像是三维矩阵,读取的图像为BGR格式
python 复制代码
# 读取当前时刻的摄像头捕获的1帧图像
success, frame = capture.read()
# 遍历&等待任意键盘输入
# -1表示等待delay后,没有任何键盘输入(对于视频而言几乎没等)
while success and cv.waitKey(1) == -1:  # 读取正确 and 1毫秒内无键盘输入 == True
    cv.imshow('frame', frame)
    # 读取下一帧的图像
    success, frame = capture.read()

5. capture.release ( ) 释放资源

python 复制代码
capture.release()
cv.destroyAllWindows()

6. cv.VideoWriter ( ) 视频写入

复制代码
	video_writer = cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor]) 
		作用:
			创建一个视频输出对象,即将读取的图像写入指定路径下的文件中
		参数:
			filename:第一个参数是要保存的文件的路径
			fource:指定编码器
			fps:要保存的视频的帧率
			frameSize:要保存的文件的画面尺寸
			isColor:指示是黑白画面还是彩色的画面
	
	video_writer.write(frame)
	作用:
		将读取到的图像写入video_writer中
		
	其中,fource可选择模式 :
			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

【注意】

复制代码
	在OpenCV中,写入视频时常需要减去1的原因是:
		因为视频的帧数是从0开始计数的,而不是从1开始计数的
		即可以理解为第0帧无内容
		因此,当要写入10秒时长的视频时,需要计算出总共的帧数,公式为10*fps-1

感谢阅读🌼

如果喜欢这篇文章,记得点赞👍和转发🔄哦!

有任何想法或问题,欢迎留言交流💬,我们下次见!

本文相关代码存放位置

Opencv2 视频操作

祝愉快🌟!


相关推荐
njsgcs6 分钟前
我的知识是以图片保存的,我的任务状态可能也与图片有关,我把100张知识图片丢给vlm实时分析吗
人工智能
星爷AG I22 分钟前
20-4 长时工作记忆(AGI基础理论)
人工智能·agi
#卢松松#37 分钟前
用秒悟(meoo)制作了一个GEO查询小工具。
人工智能·创业创新
zandy101141 分钟前
Agentic BI 架构实战:当AI Agent接管数据建模、指标计算与可视化全链路
人工智能·架构
数字供应链安全产品选型42 分钟前
关键领域清单+SBOM:834号令下软件供应链的“精准治理“逻辑与技术落地路径
人工智能·安全
Flying pigs~~1 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
zuozewei1 小时前
从线下到等保二级生产平台:一次公有云新型电力系统 AI 部署复盘
人工智能
sanshanjianke1 小时前
AI辅助网文创作理论研究初步总结(一):AI辅助网文创作系统
人工智能·ai写作
碳基硅坊1 小时前
OpenClaw 落地应用实践:把 AI 从“能聊“变成“能干活“
人工智能·openclaw
β添砖java1 小时前
深度学习(13)PyTorch神经网络基础
人工智能·深度学习