学做ppt的网站有哪些,多仓库版仓库管理网站建设源码,藁城 网站,动漫制作必须会画画吗在我们进行计算机视觉任务时#xff0c;经常会对视频中的图像进行操作#xff0c;这里我来给大家分享一下#xff0c;cv2对视频文件的操作方法。这里我们主要介绍cv2.VideoCapture函数的基本使用方法。
cv2.VideoCapture函数
当我们在使用cv2.VideoCapture函数时#xff… 在我们进行计算机视觉任务时经常会对视频中的图像进行操作这里我来给大家分享一下cv2对视频文件的操作方法。这里我们主要介绍cv2.VideoCapture函数的基本使用方法。
cv2.VideoCapture函数
当我们在使用cv2.VideoCapture函数时我们通常使用轮询的方式即
while True:if condition1:do somethingif condition2:break...更一般化的是
import cv2
#这里是获取实时视频源如果是读取已有视频文件capcv2.VideoCapture(filename)
capcv2.VideoCapture(index0)
if cap.isOpened():while True:ret,framecap.read()#...#... 针对视频中的每一帧图像的其他操作#....if not ret:breakcv2.imshow(test,frame)keycv2.waitKey(1)if key27:#置顶一个按键来结束循环,这里使用esc健的ASCII码breakcap.release()cv2.destroyAllWindows()
else:print(摄像头未打开)
初始化 视频文件 如果你需要处理的是已有的视频文件而不是打开摄像头捕获的实时视频流那么只需要传入filename即可。apiPerference是可选参数主要用来指定视频捕获的后端即使用哪种顶层API来读取视频流或摄像头默认值是cv2.CAP_ANY由opencv自动选择
import cv2filename:视频文件路径 .mp4
apiPerference:指定视频捕获的后端(即使用哪种底层API来读取视频流或摄像头)apiPerference参数常用flag:
cv2.CAP_ANY: 自动选择默认后端(OpenCV自行决定)跨平台
cv2.CAP_ANDROID: 使用Android的Camera2 API
cv2.CAP_DSHOW: 使用DirectShow(Windows专用)
cv2.CAP_MSMF: 使用Microsoft Media Foundation(Windows 10)
cv2.CAP_V4L2: 使用Video4Linux2(Linux专用)Linux
cv2.CAP_FFMPEG: 使用FFmpeg解码视频文件跨平台(需安装 FFmpeg)
cv2.CAP_GSTREAMER: 使用 GStreamer(Linux常用)
cv2.CAP_OPENNI: 用于深度摄像头(如Kinect)特定设备capcv2.VideoCapture(rtest.mp4) 实时视频流 如果你处理的是实时视频流那么需要设置index参数不使用外接设备时index一般都设置为apiPerference是可选参数主要用来指定视频捕获的后端即使用哪种顶层API来读取视频流或摄像头默认值是cv2.CAP_ANY由opencv自动选择
import cv2index:0或1,0是电脑内置摄像头,1是外接摄像头,没有外接摄像头仍然设置Index1的话不会报错,只是代码不运行
apiPerference:指定视频捕获的后端(即使用哪种底层API来读取视频流或摄像头)apiPerference参数常用flag:
cv2.CAP_ANY: 自动选择默认后端(OpenCV自行决定)跨平台
cv2.CAP_ANDROID: 使用Android的Camera2 API
cv2.CAP_DSHOW: 使用DirectShow(Windows专用)
cv2.CAP_MSMF: 使用Microsoft Media Foundation(Windows 10)
cv2.CAP_V4L2: 使用Video4Linux2(Linux专用)Linux
cv2.CAP_FFMPEG: 使用FFmpeg解码视频文件跨平台(需安装 FFmpeg)
cv2.CAP_GSTREAMER: 使用 GStreamer(Linux常用)
cv2.CAP_OPENNI: 用于深度摄像头(如Kinect)特定设备capcv2.VideoCapture(index1,apiPreferencecv2.CAP_ANY) 常用属性
cap.isOpened()
检查视频源是否打开返回值为True 或False
import cv2
capcv2.VideoCapture(index0,apiPreferencecv2.CAP_MSMF)
if cap.isOpened():print(摄像头已打开)while True:ret,framecap.read()cv2.imshow(test,frame)keycv2.waitKey(1)if key27:#按下esc健退出breakcap.release()cv2.destroyAllWindows()
else:print(摄像头未打开) cap.read() 用来读取视频中的下一帧返回值为(ret,frame) ret为是否成功frame为图像数据 cap.read()是我们处理视频文件中最关键的函数如果没有这一步那么根本无法处理视频文件中的图像。
import cv2
capcv2.VideoCapture(index0,apiPreferencecv2.CAP_MSMF)
if cap.isOpened():print(摄像头已打开)while True:ret,framecap.read()if not ret:breakcv2.imshow(test,frame)keycv2.waitKey(1)if key27:#按下esc健退出breakcap.release()cv2.destroyAllWindows()
else:print(摄像头未打开) cap.release() 用来释放视频源出现在cv2.destroyAllWindows()前。
import cv2
#这里是获取实时视频源如果是读取已有视频文件capcv2.VideoCapture(filename)
capcv2.VideoCapture(index0)
if cap.isOpened():while True:ret,framecap.read()#...#...#....cv2.imshow(test,frame)keycv2.waitKey(1)if key27:#设定一个按键来结束循环,这里使用esc健的ASCII码breakcap.release()cv2.destroyAllWindows()
else:print(摄像头未打开) 视频属性控制 cap.get(propId) 用来获取当前视频的属性值比如帧宽高FPS等。 这里我们以获取当前帧率并标记在窗口内为例
fpscv2.get(cv2.CAP_PROP_FPS) fps的类型为Float
import cv2
#这里是获取实时视频源如果是读取已有视频文件capcv2.VideoCapture(filename)
capcv2.VideoCapture(index0)
if cap.isOpened():while True:ret,framecap.read()fpscap.get(cv2.CAP_PROP_FPS)#...#...#....cv2.putText(imgframe,textffps:{fps},org(50,50),fontFace1,fontScale3,color(255,0,0))cv2.imshow(test,frame)keycv2.waitKey(1)if key27:#设定一个按键来结束循环关闭摄像头,这里使用esc健的ASCII码breakcap.release()cv2.destroyAllWindows()
else:print(摄像头未打开) 最后我将所有的本文所有的要点都总结在了下方这个表格里。
参数/方法说明初始化capcv2.VideoCapture()创建视频捕获对象参数可以是设备索引(摄像头)或视频文件路径。常用属性cap.isOpened()检查视频源是否成功打开返回 True/False。cap.read()读取下一帧返回 (ret, frame)ret 为是否成功frame 为图像数据。cap.release()释放视频源。视频属性控制cap.get(propId)获取视频属性值如帧宽、高、FPS 等propId 为属性标识。cap.set(propId, value)设置视频属性值部分属性可修改。常用属性标识propIdcv2.CAP_PROP_FRAME_WIDTH帧的宽度(像素)。cv2.CAP_PROP_FRAME_HEIGHT帧的高度(像素)。cv2.CAP_PROP_FPS视频的帧率(Frames Per Second)。cv2.CAP_PROP_FRAME_COUNT视频的总帧数(仅对文件有效)。cv2.CAP_PROP_POS_MSEC当前帧的时间戳(毫秒,仅对文件有效)。cv2.CAP_PROP_POS_FRAMES当前帧的索引(从 0 开始)。其他方法cap.grab()快速抓取下一帧(不解码)通常与 cap.retrieve() 配合使用。cap.retrieve()解码并返回由 grab() 抓取的帧。cap.getBackendName()返回当前使用的后端名称(如 FFMPEG、DSHOW)。