中文logo设计网站,沈阳seo,随州百度网站建设,租一个国外的服务器 建设网站目录
引言
一、视频读取技术
VideoCapture 类
构造函数
常用方法
二、视频写入技术
VideoWriter 类
构造函数
常用方法
三、视频录制技术
1. 包含OpenCV头文件
2. 初始化VideoCapture对象
3. 设置视频编码器
4. 读取和写入视频帧
5. 释放资源
6. 编码格式选择 …目录
引言
一、视频读取技术
VideoCapture 类
构造函数
常用方法
二、视频写入技术
VideoWriter 类
构造函数
常用方法
三、视频录制技术
1. 包含OpenCV头文件
2. 初始化VideoCapture对象
3. 设置视频编码器
4. 读取和写入视频帧
5. 释放资源
6. 编码格式选择 四、示例代码读写视频文件
五、总结 引言
OpenCVOpen Source Computer Vision Library是一个开源的计算机视觉和机器学习软件库广泛应用于图像和视频处理、面部识别、物体检测等多个领域。本文将详细介绍OpenCV中的视频读写技术包括VideoCapture 和 VideoWriter 类和相关函数并通过代码示例展示如何读取和写入视频文件。
一、视频读取技术
VideoCapture 类
cv::VideoCapture 是OpenCV中用于处理视频输入的类它可以从摄像头、视频文件或图像序列中读取帧。以下是该类的主要方法和用法。
构造函数
cv::VideoCapture::VideoCapture(const string filename): 通过文件路径打开视频文件。cv::VideoCapture::VideoCapture(int device): 通过设备ID打开摄像头默认摄像头ID为0。
常用方法
bool isOpened() const: 检查视频是否成功打开。bool read(OutputArray image): 读取视频中的一帧并将其存储在Mat对象中。void release(): 释放VideoCapture对象所占用的资源。double get(int propId): 获取视频属性如帧率、宽度、高度等。bool set(int propId, double value): 设置视频属性如帧率、宽度、高度等。
二、视频写入技术
VideoWriter 类
cv::VideoWriter 是OpenCV中用于将图像帧序列保存为视频文件的类。在创建视频文件时需要指定文件名、编解码器、帧率、宽度和高度等参数。
构造函数
cv::VideoWriter::VideoWriter(const string filename, int fourcc, double fps, Size frameSize, bool isColortrue): filename: 视频文件的名称和路径。fourcc: 编解码器如 CV_FOURCC(M,J,P,G) 表示MJPG编解码器。fps: 视频的帧率。frameSize: 视频帧的大小。isColor: 视频图像是否为彩色默认为true。
常用方法
bool isOpened() const: 检查VideoWriter对象是否成功打开。void write(InputArray image): 将一帧图像写入视频文件。void release(): 释放VideoWriter对象所占用的资源。
三、视频录制技术
1. 包含OpenCV头文件
在C源文件的开头需要包含OpenCV的相关头文件。
#include opencv2/opencv.hpp
#include iostream
2. 初始化VideoCapture对象
使用cv::VideoCapture类可以捕获视频数据包括来自摄像头的实时视频。
cv::VideoCapture cap(0); // 0为默认摄像头
if (!cap.isOpened()) { std::cerr 无法打开摄像头 std::endl; return -1;
}
3. 设置视频编码器
在录制视频之前需要设置视频的编码格式、帧率、分辨率等参数。
int fourcc cv::VideoWriter::fourcc(M, J, P, G); // 选择MJPG编码
double fps 20.0; // 帧率
cv::Size frameSize(640, 480); // 分辨率
cv::VideoWriter videoWriter(output.avi, fourcc, fps, frameSize, true); // 彩色模式 if (!videoWriter.isOpened()) { std::cerr 无法打开视频写入器 std::endl; return -1;
}
4. 读取和写入视频帧
通过循环读取摄像头捕获的帧并将它们写入到视频文件中。
cv::Mat frame;
while (true) { bool ret cap.read(frame); if (!ret) { std::cerr 无法读取视频帧 std::endl; break; } // 可以在这里对frame进行处理如色彩转换、添加水印等 videoWriter.write(frame); // 写入帧到视频文件 // 显示帧可选 cv::imshow(Video Capture, frame); // 按q键退出循环 if (cv::waitKey(1) ord(q)) { break; }
}
5. 释放资源
完成视频录制后需要释放VideoCapture和VideoWriter对象占用的资源。
cap.release();
videoWriter.release();
cv::destroyAllWindows();
6. 编码格式选择
OpenCV支持多种视频编码格式如MJPG、XVID、DIVX、X264等。不同的编码格式在文件体积、压缩效率和兼容性方面有所不同。例如MJPG适合高尺寸视频XVID是MPEG-4编码文件体积较小X264可以得到更小的文件体积但可能兼容性稍差。 四、示例代码读写视频文件
#include iostream
#include opencv2/opencv.hppusing namespace std;
using namespace cv;int main(int argc, char* argv[])
{// 读取原视频文件VideoCapture vcap(video.mp4);// 读取视频的帧的宽度和高度 \ 帧int fvwidth vcap.get(CAP_PROP_FRAME_WIDTH);int fvheight vcap.get(CAP_PROP_FRAME_HEIGHT);double fvfps vcap.get(CAP_PROP_FPS);// 通过cout输出获取参数值cout 宽度 fvwidth endl;cout 高度 fvheight endl;cout 帧 fvfps endl;// 录制MP4视频VideoWriter vw(writermp4.mp4, vcap.get(CAP_PROP_FOURCC), fvfps, Size(fvwidth, fvheight));Mat fm;while (1){vcap.read(fm);if (fm.empty()){break;}vw.write(fm);imshow(测试录制视频中, fm);int key waitKey(1);if (key 27){break;}}vcap.release();vw.release();waitKey(0);return 0;
}
五、总结
通过本文我们了解了OpenCV 的 VideoCapture 和 VideoWriter 类为视频读写提供了强大而灵活的功能和如何在C中使用OpenCV库进行视频录制。这包括初始化VideoCapture对象、设置视频编码器、读取和写入视频帧以及释放资源等关键步骤。掌握这些技术后你可以轻松地将摄像头捕获的视频数据保存为文件并进行进一步的处理和分析。希望这篇文章对你有所帮助