江宁交通建设集团网站,河南省和城乡建设厅网站,系统炸了我成了系统,长春网站建设880元1. 学习目标
学习 OpenCV 的视频的编码格式 cv.VideoWriter_fourcc#xff1b;学会使用 OpenCV 的视频读取函数 cv.VideoCapture#xff1b;学会使用 OpenCV 的视频保存函数 cv.VideoWriter。
2. cv.VideoWriter_fourcc()常见的编码参数
2.1 参数说明
参数说明cv.VideoWr…1. 学习目标
学习 OpenCV 的视频的编码格式 cv.VideoWriter_fourcc学会使用 OpenCV 的视频读取函数 cv.VideoCapture学会使用 OpenCV 的视频保存函数 cv.VideoWriter。
2. cv.VideoWriter_fourcc()常见的编码参数
2.1 参数说明
参数说明cv.VideoWriter_fourcc(‘M’,‘P’,‘4’,‘V’)MPEG-4编码 .mp4 可指定结果视频的大小cv.VideoWriter_fourcc(‘X’,‘2’,‘6’,‘4’)MPEG-4编码 .mp4 可指定结果视频的大小cv.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’)该参数是YUV编码类型文件名后缀为.avi 广泛兼容但会产生大文件cv.VideoWriter_fourcc(‘P’, ‘I’, ‘M’, ‘I’)该参数是MPEG-1编码类型文件名后缀为.avicv.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’)该参数是MPEG-4编码类型文件名后缀为.avi可指定结果视频的大小cv.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’)该参数是Ogg Vorbis,文件名后缀为.ogvcv.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’)该参数是Flash视频文件名后缀为.flv
2.2 使用
以写mp4视频为例以下为等价写法:
fourcc cv.VideoWriter_fourcc(m, p, 4, v)
fourcc cv.VideoWriter_fourcc(M, P, 4, V)
fourcc cv.VideoWriter_fourcc(*MP4V)
fourcc cv.VideoWriter_fourcc(*mp4v)3. 视频读取
3.1 cv.VideoCapture() 函数说明
cv.VideoCapture(filename[, apiPreference[, params]]) → VideoCapture objectcv.VideoCapture(index[, apiPreference[, params]]) → VideoCapture object3.2 参数说明
参数说明filename表示读取的视频文件的路径包括扩展名。index表示摄像头的 ID 编号0 表示默认后端打开默认摄像机。apiPreference表示决定使用那个第三方库读取视频。
4. 视频保存
4.1 cv.VideoWriter() 函数说明
cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor]) → VideoWriter object4.2 参数说明
参数说明filename表示保存的视频文件的路径包括扩展名。fourcc表示用于压缩帧的编码器/解码器的字符代码。fps表示视频流的帧速率。frameSize表示元组 (w, h)视频帧的宽度和高度。isColor表示是否彩色图像。
5. cv.VideoCapture 和 cv.VideoWriter 的成员函数
函数名说明cv.VideoCapture.isOpened()表示检查视频捕获是否初始化成功。cv.VideoCapture.read()表示捕获视频文件、视频流或捕获的视频设备。cv.VideoCapture.get(propId)表示获取 VideoCapture 类对象的属性。cv.VideoCapture.set(propId, value)表示设置 VideoCapture 类对象的属性。cv.VideoCapture.release()表示关闭视频文件或设备释放对象。cv.VideoWriter.fourcc(c1, c2, c3, c4[, ])表示构造编码器/解码器的fourcc代码。cv.VideoWriter.write(image[, ])表示写入下一帧视频。cv.VideoWriter.release()表示关闭视频写入释放对象。
6. 实例将 .avi 转 .mp4
6.1 实例代码
import cv2 as cv
import imageio# 读取视频将视频按照帧导出图片
def get_video_images(video_path):cap cv.VideoCapture(video_path)images []while cap.isOpened():ret, frame cap.read() # 读取下一帧视频图像if ret is True:cv.imshow(frame, frame)images.append(frame)key cv.waitKey(24)if key ord(q):breakelse:breakcap.release()cv.destroyAllWindows()return images# 转MP4
def create_mp4(filename, fps, images):h,w,c images[0].shapefourcc cv.VideoWriter_fourcc(*mp4v)writer cv.VideoWriter(filename, fourcc, fps, (w,h))for frame in images:writer.write(frame)writer.release()if __name__ __main__:imgs get_video_images(./images/Megamind.avi)create_mp4(./images/Megamind.mp4, 24, imgs)6.2 转换结果使用 gif 展示 7. 总结
视频写入类VideoWriter的参数frameSize是元组 (w, h)即视频帧的宽度和高度而OpenCV图像的形状是 (h, w)注意二者的顺序相反write 写入图片的宽高必须保持一直使用摄像头时index0 表示默认后端打开默认摄像机例如笔记本内置摄像头。