欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > OpenCV 视频处理与保存

OpenCV 视频处理与保存

2025/6/19 16:55:10 来源:https://blog.csdn.net/weixin_44629261/article/details/148743901  浏览:    关键词:OpenCV 视频处理与保存


一、知识点
1、VideoCapture类
  (1)、用于从视频文件、摄像机或图像序列中捕获视频帧。
  
  (2)、构造函数 VideoCapture(const String & filename, int apiPreference = CAP_ANY)
      a、filename可以是视频文件的名称(例如"video.avi"),可以是图像序列(例如"img%02.jpg", 它将读取"img00.jpg"、"img01.jpg"、"img02.jpg"等),还可以是URL。
      b、apiPreference是实际执行捕获的API后端,VideoCaptureAPIs枚举值,如: CAP_ANY、CAP_FFMPEG、CAP_IMAGES等。
      
  (3)、构造函数 VideoCapture(int index, int apiPreference = CAP_ANY)
      a、打开摄像头进行视频拍摄。
      b、index是视频捕获设备的索引,默认摄像头传递0。
      c、apiPreference是实际执行捕获的API后端,VideoCaptureAPIs枚举值,如: CAP_ANY、CAP_FFMPEG、CAP_IMAGES等。
      
  (4)、成员函数 virtual bool read(OutputArray image)
      a、抓取、解码并返回一个视频帧。
      b、image为返回的视频帧。 如果没有抓取任何帧,则图像为空,返回false。
  
  (5)、成员函数 virtual void release();
      a、关闭视频文件或捕获设备。
      
  (6)、成员函数 double get(int propId) const;
      a、用于检索视频流的各种属性值。
      b、propId是VideoCaptureProperties枚举值。
      c、VideoCaptureProperties的具体值如:
        CAP_PROP_FRAME_WIDTH=3,//视频流中帧的宽度
        CAP_PROP_FRAME_HEIGHT=4,//视频流中帧的高度
        CAP_PROP_FPS=5,//帧率
        CAP_PROP_FOURCC=6,//4个字符的编解码器代码
        CAP_PROP_FRAME_COUNT=7,//视频文件中的帧数
        
      
2、视频分辨率
  (1)、P,Progressive,逐行扫描,即视频纵向的像素行数。
      如720P,分辨率为1280 * 720像素。
      如1080P,分辨率为1920 * 1080像素。
  (2)、K,视频横向的像素列数。
      如2K,分辨率为2560 * 1440像素。
      如4K,分辨率为3840 * 2160 或 4096 * 2160像素。
      如8K,分辨率为7680 * 4320像素。
  (3)、MP,百万像素,即像素行数和列数相乘后的结果。
      如2MP,是1920 * 1080 = 2073600像素,约等于2MP。
  (4)、超高清(Ultra HD),4K分辨率,3840 * 2160。
      全高清(Full HD),1080P分辨率,1920 * 1080。
      高清(HD),720P分辨率,1280 * 720。
      标清(SD),480P分辨率,720 * 480。
      
3、视频码率
  (1)、码率指视频在单位时间内传输或处理的数据量,单位通常是比特每秒(bps)、千比特每秒(Kbps)、兆比特每秒(Mbps)。
  (2)、它是影响视频质量和文件大小的核心参数。
  (3)、码率的本质是视频数据压缩程度的体现,在视频编码过程中,编码器通过算法将原始图像信息压缩为更小的数据流。
  (4)、码率越高,压缩程度越低,图像细节保留越多,文件体积越大; 反之,低码率会牺牲画质但节省存储空间和带宽。
  
4、视频帧速率
  (1)、视频帧速率,简称FPS,代表视频每秒内显示的图像帧数。
  (2)、帧速率越高,画面越流畅,但也需要更多的数据量来存储和传输。
  
5、视频分辨率、码率、帧速率关系:
  (1)、相同分辨率和帧速率下,码率越高,视频画面质量越出色。
  (2)、相同的分辨率和码率下,合理范围内,帧速率越高,视频画面流畅度越好。(超出合理范围容易出现卡顿)
  (3)、相同的帧速率和码率下,合理范围内,分辨率越高,视频画面清晰度越高。(超出合理范围容易出现噪点和模糊)
  
6、VideoWriter类
  (1)、用于编写视频文件或图像序列。
  (2)、构造函数 VideoWriter(const String & filename, int fourcc, double fps, Size frameSize, bool isColor = true)
      filename: 输出视频文件的名称。
      fourcc: 压缩帧的编解码器。
      fps: 输出视频流的帧率。
      frameSize: 视频帧的大小。
      isColor: true编码器期望编码彩色帧,false使用灰度帧。
  (3)、成员函数 virtual void write(InputArray image)
      a、将指定的图像写入视频文件。
      b、image表示要写入的图像,一般彩色图像采用BGR格式,大小和构造时指定的frameSize一样。
  (4)、virtual void release()
      a、释放资源。
      
7、注意:
  (1)、OpenCV不处理音频。
  (2)、OpenCV处理视频有大小限制,理论上不要超过2G。


二、示例代码

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::VideoCapture capture("../images/video.mp4");double frame_width = capture.get(cv::CAP_PROP_FRAME_WIDTH);double frame_height = capture.get(cv::CAP_PROP_FRAME_HEIGHT);double count = capture.get(cv::CAP_PROP_FRAME_COUNT);double fps = capture.get(cv::CAP_PROP_FPS);std::cout << "frame_width = " << frame_width << std::endl;std::cout << "frame_height = " << frame_height << std::endl;std::cout << "count = " << count << std::endl;std::cout << "fps = " << fps << std::endl;cv::VideoWriter writer("C:/Users/ml/Desktop/new_video.mp4", capture.get(cv::CAP_PROP_FOURCC), fps, cv::Size(frame_width, frame_height), true);cv::Mat frame;while (true){capture.read(frame);if (frame.empty()){break;}cv::imshow("视频演示", frame);writer.write(frame);//此处时间影响"视频演示"窗口的图片流显示快慢int c = cv::waitKey(33);if (c == 27){break;}}capture.release();writer.release();return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词