カメラを使用してビデオを保存するにはVideoWriter(もちろんVideoCapture)クラスを使用しようとしています。 10秒を超えると、最後の10秒が出力ファイルに保存されます。コードにはVideoWriterのインスタンスが2つあります。私はチャンネル数が3であると確信しています(C++)OpenCV VideoWriterアサーションに失敗しましたimg.cols == width && img.rows == height * 3
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;
}
}
}
}
と私は何の問題も会っていない。ここで OpenCV Error: Assertion failed (img.cols == width && img.rows == height*3) in cv::mjpeg::MotionJpegWriter::write, file C:\build\master_winpack-build-win64- vc14\opencv\modules\videoio\src\cap_mjpeg_encoder.cpp, line 842
が私のコードです:実行している場合しかし、私は常に、コンソールウィンドウに次のエラーを得ましたvw(実際にはREC2.aviは正常に開くことができますが、REC.aviでは開けません)。
私はWin20でVS2017とOpenCVの最新バージョンを使用します。
私はOpenCVの完全な初心者であり、試してみるべきことがありません。
ソースコードのどのラインでOpenCVでアサーションを取得できますか? –
次の行にあります: 'vw2 << frame' –
これをチェックしてください。 [リンク。](https://stackoverflow.com/questions/40848254/opencv-videowriter-size-issue) –