【OpenCV + VS】视频流处理与图像处理:实时视频流与视频保存
OpenCV 提供了强大的视频流处理功能,可以让我们轻松地读取摄像头或视频文件、进行实时视频处理、保存处理后的结果,并执行各种图像处理操作,如灰度化、目标检测、边缘检测、ROI 提取等。
1. 获取视频文件的基本属性
在开始视频处理之前,首先要了解视频的一些基本属性,如视频的宽度、高度、总帧数和帧率。使用 VideoCapture 类可以方便地获取这些信息。
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;void video_properties_demo() {VideoCapture capture("path_to_video.mp4"); // 从视频文件读取if (!capture.isOpened()) {std::cerr << "无法打开视频文件!" << std::endl;return;}// 获取视频基本属性int frame_width = capture.get(CAP_PROP_FRAME_WIDTH); // 获取视频帧宽度int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT); // 获取视频帧高度int frame_count = capture.get(CAP_PROP_FRAME_COUNT); // 获取视频帧数double fps = capture.get(CAP_PROP_FPS); // 获取视频帧率std::cout << "Frame width: " << frame_width << std::endl;std::cout << "Frame height: " << frame_height << std::endl;std::cout << "Number of frames: " << frame_count << std::endl;std::cout << "FPS: " << fps << std::endl;
}int main() {video_properties_demo();return 0;
}
输出:
Frame width: 300
Frame height: 230
Number of frames: 89
FPS: 25
VideoCapture类
- 功能:OpenCV 中用于读取视频文件、摄像头输入等视频流的核心类,支持多种视频格式(如 MP4、AVI 等)。
- 初始化:
VideoCapture capture("path_to_video.mp4");通过视频文件路径初始化对象,若要读取摄像头,可传入摄像头索引(如0表示默认摄像头)。 - 状态检查:
capture.isOpened()用于判断视频是否成功打开(文件路径错误、格式不支持等情况会返回false),失败时通过std::cerr输出错误信息。
视频属性获取(CAP_PROP_* 常量)
通过VideoCapture::get(int propId)方法获取视频的关键属性,参数为 OpenCV 定义的属性常量:
CAP_PROP_FRAME_WIDTH:视频帧的宽度(像素),即每帧图像的水平像素数。CAP_PROP_FRAME_HEIGHT:视频帧的高度(像素),即每帧图像的垂直像素数,与宽度共同决定视频的分辨率(如 1920×1080)。CAP_PROP_FRAME_COUNT:
