一、videowriter简介
在OpenCV(开源计算机视觉库)中,我们可以使用videowriter实现创建和保存视频文件。videowriter提供了一个简单的API,可以将视频数据写入指定的文件格式中。因此,可以通过它将处理过的视频数据保存到硬盘中,以便以后使用。
二、创建videowriter对象
在使用videowriter之前,我们需要创建一个videowriter对象。创建videowriter对象的方法如下:
cv::VideoWriter outputVideo;
这里,我们使用了OpenCV的命名空间cv,并创建了一个名为outputVideo的videowriter对象。
三、设置视频属性
在创建videowriter对象后,我们需要设置输出视频的属性。这些属性包括视频文件的名称、帧率、分辨率、颜色空间等。可以通过下面的代码设置视频属性:
cv::VideoWriter outputVideo;
outputVideo.open("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, cv::Size(640, 480), true);
上面的代码中,我们设置了输出视频的名称为“output.avi”,帧率为30帧/秒,分辨率为640x480,颜色空间为彩色。在此示例中,我们使用了MJPG编解码器,设置图像质量(参数true)。
四、写入帧到视频
一旦设置了videowriter对象的属性,我们可以开始将帧写入视频。将帧写入视频的方法如下:
cv::VideoWriter outputVideo;
outputVideo.open("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, cv::Size(640, 480), true);
cv::Mat frame;
// 在此读取帧
outputVideo.write(frame);
在上面的示例中,我们首先创建了一个名为frame的Mat对象。该对象中存储了一帧图像的像素值。接下来,我们调用outputVideo.write(frame)方法将该帧写入到视频中。
五、释放资源
写入视频流后,我们需要释放所有与videowriter对象相关的资源以确保所有数据都写入文件中。释放资源的方法如下:
cv::VideoWriter outputVideo;
outputVideo.open("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 30, cv::Size(640, 480), true);
while (视频流不为空) {
cv::Mat frame;
// 在此读取帧
outputVideo.write(frame);
}
outputVideo.release();
在上述示例中,我们使用while循环将多帧图像写入视频中。在最后一帧写入后,我们调用outputVideo.release()方法释放资源。
六、代码示例
下面是一个完整的示例,其中包括创建videowriter对象、设置视频属性、将帧写入视频和释放资源的所有步骤:
#include
#include
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap(0);
if (!cap.isOpened())
{
cout << "无法打开视频流!" << endl;
return -1;
}
double fps = cap.get(CAP_PROP_FPS);
Size size((int)cap.get(CAP_PROP_FRAME_WIDTH), (int)cap.get(CAP_PROP_FRAME_HEIGHT));
string outputVideoName = "output.avi";
VideoWriter outputVideo;
outputVideo.open(outputVideoName, VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, size, true);
if (!outputVideo.isOpened())
{
cout << "无法创建输出视频文件!" << endl;
return -1;
}
Mat frame;
while (cap.read(frame))
{
imshow("视频流", frame);
outputVideo.write(frame);
if (waitKey(1) == 27)
{
// 退出按键ESC
break;
}
}
cap.release();
outputVideo.release();
return 0;
}
七、小结
我们已经详细了解了OpenCV中的videowriter,包括如何创建videowriter对象、设置视频属性、将帧写入视频和释放资源等。通过使用videowriter,我们可以将图像处理的结果保存到硬盘中以供以后再次使用。