OpenCV对视频读写播放

Posted AI学长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV对视频读写播放相关的知识,希望对你有一定的参考价值。

一、说明

OpenCV的VideoCapture类VideoWriter类提供了视频处理功能,支持各种格式的视频文件。 视频处理的基本操作步骤如下。

  • (1)将视频文件或者摄像头作为数据源来创建VideoCapture对象。
  • (2)调用VideoCapture对象的read()方法获取视频中的帧,每一帧都是一幅图像。
  • (3)调用VideoWriter对象的write()方法将帧写入视频文件,或者调用cv2.imshow()函数在窗口中显示帧(即播放视频)。

二、播放视频例子

OpenCV播放视频的实质是逐帧读取和显示帧图像。

创建VideoCapture对象时,如果参数传入视频名字表示从文件读取视频。如果传入一个整形数值,表示从摄像头读取视频,数值为摄像头编号。

import cv2

# opencv对视频的简单操作
if __name__ == '__main__':
    # 创建VideoCatpture对象
    video = cv2.VideoCapture("./test2-5.mp4")   # 读取视频(视频源为视频文件)
    # video = cv2.VideoCapture(0)                # 读取视频(视频源为编号0的摄像头)
    fps = video.get(cv2.CAP_PROP_FPS)           # 读取视频帧速率
    # 显示视频
    while True:
        ret, frame = video.read()     # 读取一帧视频,一帧就是一张图像
        if ret == False:
            break
        cv2.imshow("myframe", frame)  # 显示
        cv2.waitKey(int(60/fps))      # 用帧率来计算显示帧间隔
    cv2.destroyAllWindows()

三、保存视频例子

将视频写入文件与播放视频类似,需要逐帧将视频写入文件。

常用的解码器格式如下:

  • cv2.VideoWriter_fourcc('P','I','M','1'):XVID的MPEG-1编码格式,视频文件扩展名为.avi。 cv2.VideoWriter_fourcc('M','P','4','2'):Microsoft的MPEG-4编码格式,视频文件扩展名为.avi。
  • cv2.VideoWriter_fourcc('X','V','I','D'):XVID的MPEG-4编码格式,视频文件扩展名为.avi。
  • cv2.VideoWriter_fourcc('F','L','V','1'):XVID的MPEG-4编码格式,视频文件扩展名为.flv。
import time
import cv2

# opencv对视频的简单操作
if __name__ == '__main__':
    # 创建VideoCatpture对象
    video = cv2.VideoCapture("./test2-5.mp4")
    # 视频的存储对象
    fps = video.get(cv2.CAP_PROP_FPS)  # 读取视频帧速率
    size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),
            int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    save_v = cv2.VideoWriter("./save_v.avi",        # 写入视频文件
        cv2.VideoWriter_fourcc('X','V','I','D'),    # 视频格式
        fps,                                        # 视频帧率
        size)                                       # 视频分辨率
    # 显示视频
    while True:
        ret, img = video.read()
        if ret == False:
            break
        cv2.imshow("myimage", img)
        save_v.write(img)                           # 一帧一帧的写入把视频写入文件
        cv2.waitKey(int(60/fps))
    cv2.destroyAllWindows()

OpenCV-视频读写(java版)

@​​TOC​

​​​OpenCV 2 中提供了两个类来实现视频的读写。读视频的类是​VideoCapture​,写视频的类是 ​VideoWriter

读视频

VideoCapture 既可以从视频文件读取图像,也可以从摄像头读取图像。该类提供了一系列构造函数和方法打开视频文件或摄像头。下方对VideoCapture的常用方法进行说明

方法

说明

open()


VideoCapture()

open(index)


VideoCapture(index)

index表示要打开的视频捕获设备的ID

通过构造函数的方式打开第index个摄像头

(下方不再说明)

open(int index, int apiPreference)

apiPreference:媒体类型,缺省时默认为  CAP_ANY


(更多查看Videoio类)

open(int index, int apiPreference, MatOfInt params)

open(String filename)

打开一个视频文件。

filename:文件地址

open(String filename, int apiPreference)

open(String filename, int apiPreference, MatOfInt params)

示例:

public static void main(String[] args) 
String libraryPath= System.getProperty("user.dir")+"\\\\lib\\\\opencv_java460.dll";
System.load(libraryPath);
VideoCapture vc = new VideoCapture();
//打开摄像头
vc.open(0);
Mat mat = new Mat();
while(vc.read(mat))
for(int i=0;i<mat.rows();i++)
for (int j=0;j<mat.cols();j++)
if (i>(mat.rows()/2) )
//给相应位置赋予像素值
mat.put(i,j,144,238,144);



HighGui.imshow("test", mat);
HighGui.waitKey(1);


vc.release();
//关闭窗口
HighGui.destroyAllWindows();

执行效果:

OpenCV-视频读写(java版)_构造函数

参考文档:

​OpenCV Java documentation (4.6.0)​

以上是关于OpenCV对视频读写播放的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV-Python3.OpenCV的图像基础操作

如何使用 Opencv 和 python 从网络上播放视频

基于python + opencv的视频播放调节功能

无法使用 VideoCapture 在 OpenCV+Python 中读取或播放视频

Python-pyqt5+opencv视频播放器,上传本地视频

OpenCV Python 视频播放 - 如何为 cv2.waitKey() 设置正确的延迟