视频没有写入文件

video is not being written to file

本文关键字:文件 视频      更新时间:2023-10-16

我使用opencv直接从网络摄像头捕获视频并将其保存到avi文件。我使用了以下代码:

 #include "StdAfx.h"

using namespace std;
using namespace cv;

int _tmain()
{
    VideoCapture src;
    src.open(1);
    if(!src.isOpened())
    {
        cout<<"could not open cameran";
        return -1;
    }
    else
    {
        cout<<"camera openedn";
    }
    int ex=static_cast<int>(src.get(CV_CAP_PROP_FOURCC));
    Size s(Size((int)src.get(CV_CAP_PROP_FRAME_WIDTH),(int)src.get((CV_CAP_PROP_FRAME_HEIGHT))));
    VideoWriter out;
    out.open("out.avi",ex,20,s);
    while(1)
    {
        Mat im;
        src>>im;
        imshow("vid",im);
        out<<im;
        char c;
        c=cvWaitKey(50);
        if(c==27)
            break;
    }
    system("pause");
}

所有的头文件都包含在stdafx.h中。但实际上我得到的是一个大小为0bite的avi文件。如何解决这个问题?我需要录制不显示的摄像头视频


注意:我是openCV的新手,我正在使用Visual Studio 2010

要运行应用程序而不显示摄像头只需删除

imshow("vid",im);

。avi的大小为0,因为您在应用程序运行时打开它(当您打开视频流并在其上写入时),要打开您录制的视频,只需关闭应用程序以结束对视频的写入,然后打开它

实际上您的程序中没有逻辑错误。唯一的问题是你用来写视频的FOUR_CC编解码器。

当我运行你的代码时,我遇到了和你一样的问题。当我将错误检查添加到out.open()函数时,我发现了问题。

很可能,相机的FOUR_CC编解码器不被avi容器支持。

当您使用Windows时,一个好的选择是在out.open的第二个参数中使用CV_FOURCC_PROMPT

这将打开一个弹出列表框,其中包含不同的FOUR_CC编解码器可用。如果你不知道该选哪个,就选Full Frames (Uncompressed)。这是最兼容的选项,但会增加输出视频文件的大小。

最后的代码应该是这样的:

if(!out.open("out.avi",CV_FOURCC_PROMPT,20,s))
{
    cout<<"Writer Not Opened"<<endl;
    return -1;
}