opencv-python官方文档学习笔记(二)之Getting Started with Videos

本文是OpenCV-Python学习笔记的第二部分,主要介绍如何使用OpenCV处理视频,包括创建VideoCapture对象来捕获视频,使用cap.read()和cap.isOpened()检测视频读取状态,以及利用cv.VideoWriter()保存视频。还讲解了cv.waitKey()的作用和VideoWriter_fourcc()的含义。最后,提到了cv.flip()函数用于图像翻转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天opencv-python安装和图像的操作笔记链接:https://blog.youkuaiyun.com/Nyte2018/article/details/88649272
今天学习关于视频的操作
Capture Video from Camera
想要获取视频,先创建一个VideoCapture对象,参数为可区分摄像头即可,简单点选0,1之类。
来看下面一段代码:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    # Our operations on the frame come here
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # Display the resulting frame
    cv.imshow('frame',gray)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()

cap.read():返回True或者False,即ret的值,如果能正确读出,就是true,因此这个函数搭配while(True)用来检测逐帧读视频有没有读完。frame代表每一帧的图片。当不能识别报错的时候,可以用cap.isOpened()来检测,如果返回True,则说明摄像头已打开,否则用cap.open()函数打开摄像头。
cap.get(propId):获取对象的特征,propld为0-18。每个数字代表video的一个特征(如果有这个特征的话)。
cap.set(propId, value):value为更改propld对应属性。
下面为propld表:

propld函数名函数作用
0cv.CAP_PROP_POS_MSEC以毫秒为单位获取视频现在的位置
1cv.CAP_PROP_POS_FRAMES基于0的帧获取下一帧
2cv.CAP_PROP_POS_AVI_RATIO视频相对位置,0代表开始,1代表结束
3cv.CAP_PROP_FRAME_WIDTH视频流中帧的宽度
4cv.CAP_PROP_FRAME_HEIGHT视频流中帧的高度
5cv.CAP_PROP_FPS帧速
6cv.CAP_PROP_FOURCC4个字符表示的视频编码器格式
7cv.CAP_PROP_FRAME_COUNT视频帧数
8cv.CAP_PROP_FORMATcv.VideoCapture.retrieve返回的Mat格式
9cv.CAP_PROP_MODE指示当前捕获模式的后端特定值
10cv.CAP_PROP_BRIGHTNESS图像的亮度(只适用于支持的相机)
11cv.CAP_PROP_CONTRAST图像的对比度(只适用相机)
12cv.CAP_PROP_SATURATION图像的饱和度(只适用相机)
13cv.CAP_PROP_HUE图像的色相(只适用相机)
14cv.CAP_PROP_GAIN图像的增益(只适用于支持的相机)
15cv.CAP_PROP_EXPOSURE曝光(只适用于支持的相机)
16cv.CAP_PROP_CONVERT_RGB图像是否能转变为RGM模式的布尔标志
17cv.CAP_PROP_WHITE_BALANCE_BLUE_U目前不支持
18cv.CAP_PROP_RECTIFICATION立体摄像机的整流标志(注意:目前只支持DC1394 v 2.x后端)

cv.waitKey():等待键盘的输入,如果参数太小,视频会很快,反之会很慢,25毫秒比较正常。
cv.VideoWriter():保存视频。
下面来看一段代码:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# Define the codec and create VideoWriter object
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv.flip(frame,0)
        # write the flipped frame
        out.write(frame)
        cv.imshow('frame',frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# Release everything if job is finished
cap.release()
out.release()
cv.destroyAllWindows()

解释
fourcc = cv.VideoWriter_fourcc(‘XVID’):FourCC是代表四字符代码,视频播放软件通过查询 FourCC 代码并且寻找与 FourCC 代码相关联的视频解码器来播放特定的视频流。如MJPG可用cv.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’)或者cv.VideoWriter_fourcc(‘MJPG’)表示。
cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor]):视频存储函数。参数包括文件名,fourcc,每秒传输帧数,帧大小,isColor默认值为True,如果非零,编 码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
cv.flip( src, flipCode[, dst] ):图像翻转函数。flipCode:如何翻转图片,正数(比如1)代表关于y轴对称,0代表关于x轴对称,负数(比如-1)代表关于x,y对称。dst默认输出与原图片大小与类型相同。
ord(’’):将字符转换为ASCII数字。0xFF是十六进制常数。q的ASCII为113。cv2.waitKey(1) 与 0xFF(1111 1111)相与是因为cv2.waitKey(1) 的返回值不止8位,但是只有后8位实际有效,为避免产干扰,通过 ‘与’ 操作将其余位置0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值