海南省建设设厅官方网站,郑州做网站哪家便宜,北京市网站设计公司网址,手机app开发网站建设操作系统#xff1a;ubuntu22.04 OpenCV版本#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言#xff1a;C11 
算法描述 
视频写入器类。 该类提供了用于写入视频文件或图像序列的 C API。 
cv::VideoWriter 类是 OpenCV 库中用于创建和写入视频文件的一个类。它提供了… 操作系统ubuntu22.04 OpenCV版本OpenCV4.9 IDE:Visual Studio Code 编程语言C11 
算法描述 
视频写入器类。 该类提供了用于写入视频文件或图像序列的 C API。 
cv::VideoWriter 类是 OpenCV 库中用于创建和写入视频文件的一个类。它提供了用于设置视频编码器、帧率、文件路径等参数的方法并允许用户将图像帧序列写入到视频文件中。 
构造函数原型1 
默认构造函数。 
这些构造函数/函数初始化视频写入器。 
在 Linux 上使用 FFMPEG 来写入视频在 Windows 上使用 FFMPEG 或 MSWF 或 DSHOW在 MacOSX 上使用 AVFoundation。 
cv::VideoWriter::VideoWriter()	构造函数原型2 
这是一个重载的成员函数提供方便之用。它与上述函数的区别仅在于所接受的参数不同。 cv::VideoWriter::VideoWriter
(const String  	filename,int 	fourcc,double 	fps,Size 	frameSize,bool 	isColor  true 
)		参数2 
参数filename 输出视频文件的名称。参数fourcc 用于压缩帧的编解码器的4字符代码。例如VideoWriter::fourcc(‘P’, ‘I’, ‘M’, ‘1’) 是一个 MPEG-1 编码器VideoWriter::fourcc(‘M’, ‘J’, ‘P’, ‘G’) 是一个运动 JPEG 编码器等。代码列表可以在 MSDN 页面或 fourcc 站点的这个页面上获得以获取更完整的列表。FFMPEG 后端与 MP4 容器原生使用其他值作为 fourcc 代码参见 ObjectType因此您可能会收到 OpenCV 关于 fourcc 代码转换的警告消息。参数fps 创建的视频流的帧率。参数frameSize 视频帧的大小。参数isColor 如果不为零编码器将期望并编码彩色帧否则将处理灰度帧。 
提示 
在某些后端中fourcc  -1 会弹出系统中的编解码器选择对话框。 要保存图像序列请使用适当的文件名例如 img_%02d.jpg并设置 fourcc  0 或者 fps  0。使用无压缩的图像格式例如 img_%02d.BMP来保存原始帧。 大多数编解码器都是有损的。如果你想创建无损视频文件你需要使用无损编解码器例如 FFMPEG FFV1、Huffman HFYU、Lagarith LAGS 等。 如果启用了 FFMPEG使用 codec  0fps  0你可以创建一个无压缩原始视频文件。 如果使用 FFMPEG我们允许奇数宽度或高度的帧但在这种情况下我们会截断最右侧的一列/最底部的一行。可能这应该处理得更优雅一些但 FFMPEG swscale 中的一些内部函数需要偶数宽度/高度。 
构造函数原型3 
这是一个重载的成员函数提供方便之用。它与上述函数的不同之处仅在于所接受的参数。apiPreference 参数允许指定要使用的 API 后端。如果存在多个可用的读取器实现可以用来强制使用某个特定的实现例如 cv::CAP_FFMPEG 或 cv::CAP_GSTREAMER。 cv::VideoWriter::VideoWriter	
(const String  	filename,int 	apiPreference,int 	fourcc,double 	fps,Size 	frameSize,bool 	isColor  true 
)		参数3 
参数filename输出视频文件的名称。参数apiPreference指定要使用的 API 后端。如果存在多个可用的后端可以用来强制使用某个特定的实现。例如 cv::CAP_FFMPEG 或 cv::CAP_GSTREAMER。参数fourcc用于压缩帧的编解码器的4字符代码。例如VideoWriter::fourcc(‘X’, ‘V’, ‘I’, ‘D’) 表示 XVID 编码器。参数fps创建的视频流的帧率每秒帧数。参数frameSize视频帧的大小宽度和高度。参数isColor如果为 true则编码器将期望并编码彩色帧如果为 false则编码器将处理灰度帧。默认值为 true。 
构造函数原型4 
这是一个重载的成员函数提供方便之用。它与上述函数的不同之处仅在于所接受的参数。params 参数允许指定额外的编码器参数这些参数是以成对的形式编码的paramId_1, paramValue_1, paramId_2, paramValue_2, …。参见 cv::VideoWriterProperties。 cv::VideoWriter::VideoWriter	
(const String  	filename,int 	fourcc,double 	fps,const Size  	frameSize,const std::vector int   	params 
)		参数4 
参数filename输出视频文件的名称。参数fourcc用于压缩帧的编解码器的4字符代码。例如VideoWriter::fourcc(‘X’, ‘V’, ‘I’, ‘D’) 表示 XVID 编码器。参数fps创建的视频流的帧率每秒帧数。参数frameSize视频帧的大小宽度和高度。参数params额外的编码器参数存储在一个 std::vector 中。这些参数可以根据具体的编解码器进行配置。 
构造函数5 
这是一个重载的成员函数提供方便之用。它与上述函数的不同之处仅在于所接受的参数。 
cv::VideoWriter::VideoWriter
(const String  	filename,int 	apiPreference,int 	fourcc,double 	fps,const Size  	frameSize,const std::vector int   	params 
)	参数5 
参数filename输出视频文件的名称。参数apiPreference指定要使用的 API 后端。如果存在多个可用的后端可以用来强制使用某个特定的实现。例如 cv::CAP_FFMPEG 或 cv::CAP_GSTREAMER。参数fourcc用于压缩帧的编解码器的4字符代码。例如VideoWriter::fourcc(‘X’, ‘V’, ‘I’, ‘D’) 表示 XVID 编码器。参数fps创建的视频流的帧率每秒帧数。参数frameSize视频帧的大小宽度和高度。参数params额外的编码器参数存储在一个 std::vector 中。这些参数可以根据具体的编解码器进行配置 
代码示例 
#include opencv2/opencv.hpp
#include iostreamint main()
{// 创建 VideoCapture 对象来捕获视频帧cv::VideoCapture cap( 0 );  // 使用默认摄像头// 检查摄像头是否成功打开if ( !cap.isOpened() ){std::cerr  Failed to open the camera.  std::endl;return -1;}// 根据操作系统选择视频编码器的 FourCC 代码int fourcc;
#if defined( _WIN32 ) || defined( _WIN64 )// Windows 平台fourcc  cv::VideoWriter::fourcc( M, S, W, F );  // 使用 MSWF 编码器
#elif defined( __APPLE__ )// macOS 平台fourcc  cv::VideoWriter::fourcc( a, v, c, 1 );  // 使用 avc1 (H.264) 编码器
#else// Linux 或其他 Unix-like 系统fourcc  cv::VideoWriter::fourcc( X, 2, 6, 4 );  // 使用 X264 编码器
#endif// 创建 VideoWriter 对象cv::VideoWriter writer;// 打开视频文件用于写入bool success  writer.open( output.mp4,                                                                           // 输出视频文件名fourcc,                                                                                 // 视频编码器的 FourCC 代码25,                                                                                     // 帧率每秒帧数cv::Size( cap.get( cv::CAP_PROP_FRAME_WIDTH ), cap.get( cv::CAP_PROP_FRAME_HEIGHT ) ),  // 帧大小true                                                                                    // 是否为彩色视频);if ( !success ){std::cerr  Failed to initialize the video writer.  std::endl;return -1;}// 捕获并写入视频帧cv::Mat frame;while ( true ){// 从摄像头读取一帧if ( !cap.read( frame ) ){std::cout  No frame grabbed.  std::endl;break;}// 写入帧到视频文件writer.write( frame );// 显示当前帧cv::imshow( Live Camera, frame );// 按 q 键退出循环if ( cv::waitKey( 1 )  q ){break;}}// 释放资源cap.release();writer.release();cv::destroyAllWindows();return 0;
}运行结果