读取视频

import cv2 as cv

# 视频读写
'''
在OpenCV中我们要读取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件

1.创建读取视频的对象
    cap=cv.VideoCapture(filepath)
    参数:
        filepath:视频文件路径(也可以指定为摄像头)

2.视频的属性信息
    2.1.获取视频的某些属性
        retval=cap.get(proId)
    参数:
        proId:从0到18的数字,每个数字表示视频的属性
        常用属性有:
            索引      flags                       意义
            0       cv.CAP_PROP_POS_MSEC        视频文件的当前位置
            1       cv.CAP_PROP_POS_FRAMES      从0开始索引帧,帧位置
            2       cv.CAP_PROP_POSAVI_RATRIO   视频文件的相对位置(0表示开始,1表示结束)
            3       cv.CAP_PROP_FRAME_WIDTH     视频流的帧宽度
            4       cv.CAP_PROP_FRAME_HEIGHT    视频流的帧高度
            5       cv.CAP_PROP_FPS             帧率
            6       cv.CAP_PROP_FOURCC          编解码器四字符代码
            7       cv.CAP_PROP_FRAME_COUNT     视频文件的帧

    2.2修改视频的属性信息
        cap.set(proid,value)
        参数:
            proid:属性的索引,与上面的对应
            value:修改后的属性值

3.判断图像时候读取成功
    isornot=cap.isOpened()
    参数:
        若读取成功返回True,否则False

4.获取视频的每一帧图像
    ret,frame=cap.read()
    参数:
        ret:若获取成功返回True,否则False
        frame:获取到的某一帧图像

5.调用cv.imshow()显示图像,在显示图像时用cv.waitkey()设置适当的持续时间,如果太低
  视频会播放非常快,如果太高就会播放非常慢,通常情况下设置为25ms

6.最后,调用cap.release()将视频释放掉

'''


#创建读取视频的对象
cap=cv.VideoCapture('video/demo.mp4')
cap.open(0) #读取摄像头
#判断是否读取成功

while cap.isOpened():
    #获取每一帧图像
    ret,frame=cap.read()

    #如果获取成功就显示图像
    if ret:
        cv.imshow('frame',frame)

    #每一帧间隔为25ms 或者按q退出
    if cv.waitKey(25) & 0xFF == ord('q'):
        break

#释放视频对象
cap.release()
cv.destroyAllWindows()

javacv 使用OPENcl进行视频编码 opencv mp4视频文件的读写_计算机视觉

2.写入视频

import cv2 as cv

#视频保存
'''
在OpenCV中保存视频使用的是VideoWriter对象,在其中指定输出文件的名称,如下所示:
1.创建视频写入对象
    out=cv.VideoWriter(filename,fourcc,fps,frameSize)
    参数:
        filename:视频保存的位置
        fourcc:指定视频编解码器的4字节代码
        fps:帧率
        frameSize:帧大小

        设置视频的编解码器如下所示:
            retval=cv.VideoWriter_fourcc(c1,c2,c3,c4)
            参数:
                c1,c2,c3,c4:是视频编解码器的4字节代码,在fourcc.org中找到可用代码列表
                与平台紧密相关
            在windows中:DIVX(.avi)
            在OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)

        .利用cap.read()获取视频中的每一帧图像,并使用out.write()将某一帧图像写入视频中
        .使用cap.release()和out.release()释放资源

'''

#创建视频读取对象
cap=cv.VideoCapture()
cap.open('video/demo.mp4') #打开视频

#获取视频的宽和高 并转换从整数
frame_width=int(cap.get(3))
frame_height=int(cap.get(4))

#创建视频写入对象
fourcc=cv.VideoWriter_fourcc('M','J','P','G') #编码格式
out=cv.VideoWriter('video/save_test.mp4',fourcc,25,(frame_width,frame_height))


#判断是否打开成功
while cap.isOpened():

    #读取每一帧图像
    ret,frame=cap.read()

    #判断是否读取成功
    if ret:
        #写入每一帧图像
        out.write(frame)
        # cv.imshow('frame',frame)
    else:
        break

    #延迟25ms显示(即帧率设置为25ms)
    # cv.waitKey(25)

#释放资源
cap.release()
out.release()
cv.destroyAllWindows()