C++ OpenCV VideoWriter断言失败img.cols==宽度&&;img.rows==高度*3

C++ OpenCV VideoWriter断言失败img.cols==宽度&&;img.rows==高度*3,c++,opencv,C++,Opencv,我试图使用VideoWriter(当然还有VideoCapture)来使用相机并保存视频,如果视频长度超过10秒,最后10秒将保存在输出文件中。代码中有两个VideoWriter实例。但是,在运行时,控制台窗口中总是出现以下错误: OpenCV错误:中的断言失败(img.cols==width&&img.rows==height*3) cv::mjpeg::MotionJpegWriter::write,文件C:\build\master\u winpack-build-win64- vc14\

我试图使用VideoWriter(当然还有VideoCapture)来使用相机并保存视频,如果视频长度超过10秒,最后10秒将保存在输出文件中。代码中有两个VideoWriter实例。但是,在运行时,控制台窗口中总是出现以下错误:
OpenCV错误:中的断言失败(img.cols==width&&img.rows==height*3)
cv::mjpeg::MotionJpegWriter::write,文件C:\build\master\u winpack-build-win64-
vc14\opencv\modules\videoio\src\cap_mjpeg_encoder.cpp,第842行

这是我的代码:(C++)

void main()
{
视频捕获vdc(0);
VideoWriter vw(“REC.avi”,CV_FOURCC('M','J','P','G'),100.0,尺寸(vdc.get(CAP_PROP_FRAME_WIDTH),vdc.get(CAP_PROP_FRAME_HEIGHT)),真;
录像机vw1(“REC2.avi”,CV_FOURCC('M','J','P','G'),100.0,大小(vdc.get(CAP_PROP_FRAME_WIDTH),vdc.get(CAP_PROP_FRAME_HEIGHT)),true);
char cmd='a';
Mat-frm;
德沃德街,ed;
st=GetTickCount();
while(cmd!=27&&vdc.isOpened())
{
vdc>>frm;
大众ed-st-10000)
{

vw2我注意到了几个问题:

  • 您正在vw1和vw2中打开同一个文件。我不确定vw1.release()是否正确关闭该文件

  • 使用滴答计数来计算10秒的视频持续时间有点棘手。使用帧计数器和帧速率如何


  • 我注意到有几个问题:

  • 您正在vw1和vw2中打开同一个文件。我不确定vw1.release()是否正确关闭该文件

  • 使用滴答计数来计算10秒的视频持续时间有点棘手。使用帧计数器和帧速率如何


  • 我不确定,但vw2中提到的帧尺寸和大小不匹配。请尝试调整帧大小,然后写入它。

    我不确定,但vw2中提到的帧尺寸和大小不匹配。请尝试调整帧大小,然后写入它。

    在源代码的哪一行上打开断言CV?在这一行:
    vw2检查一下。但这一行完全不同(而且似乎矛盾)从那一行开始。调整大小是没有用的,我已经检查了好几次,并且确信频道和大小都是正确的——毕竟第一个VideoWriter是正确的。@I.NewtonOn在OpenCV中你得到了哪一行源代码的断言?在这一行:
    vw2Check out。但是这一行完全不同(而且似乎矛盾)从那一点开始。调整大小是无用的,我检查了好几次,确信频道和大小都是正确的——毕竟第一个录像机是正确的。@I.NewtonI对第一点不太确定,我渴望找到更好的解决方案;但第二个问题不是关键——我将它改为GetTickCount()时间还行,但问题仍然存在。我对第一点不太确定,我渴望找到更好的解决方案;但第二个问题不是关键点——我将其改为GetTickCount(),时间还行,但问题仍然存在。
    
    void main()
    {
        VideoCapture vdc(0);
        VideoWriter vw("REC.avi", CV_FOURCC('M', 'J', 'P', 'G'), 100.0, Size(vdc.get(CAP_PROP_FRAME_WIDTH), vdc.get(CAP_PROP_FRAME_HEIGHT)),true);
        VideoWriter vw1("REC2.avi", CV_FOURCC('M', 'J', 'P', 'G'), 100.0, Size(vdc.get(CAP_PROP_FRAME_WIDTH), vdc.get(CAP_PROP_FRAME_HEIGHT)),true);
        char cmd = 'a';
        Mat frm;
        DWORD st, ed;
        st = GetTickCount();
        while (cmd != 27 && vdc.isOpened())
        {
            vdc >> frm;
            vw << frm;
            vw1 << frm;
            imshow("Camera", frm);
            cmd = waitKey(10);
        }
        ed = GetTickCount();
        destroyAllWindows();
        cout << ed - st << endl;
        vdc.release();
        vw.release();
        vw1.release();
        if (ed - st > 10000)
        {
            VideoCapture vdc2("REC2.avi");
            VideoWriter vw2("REC.avi", CV_FOURCC('M', 'J', 'P', 'G'), 100.0, Size(vdc2.get(CAP_PROP_FRAME_WIDTH), vdc2.get(CAP_PROP_FRAME_HEIGHT)),true);
            DWORD st2, ed2;
            st2 = getTickCount();
            Mat frame;
            while (vdc2.isOpened())
            {
                ed2 = getTickCount();
                vdc2 >> frame;
                if (ed2 - st2 > ed - st - 10000)
                {
                    vw2 << frame;
                    waitKey(10);
                    if (vw2.get(CAP_PROP_POS_AVI_RATIO) == 1)break;
                }
            }
        }
    }