C++ OpenCV VideoWriter断言失败img.cols==宽度&&;img.rows==高度*3
我试图使用VideoWriter(当然还有VideoCapture)来使用相机并保存视频,如果视频长度超过10秒,最后10秒将保存在输出文件中。代码中有两个VideoWriter实例。但是,在运行时,控制台窗口中总是出现以下错误: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\
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;
}
}
}
}