我正在使用 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 camera\n";
return -1;
}
else
{
cout<<"camera opened\n";
}
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);
和out.avi大小为0,因为你在应用程序运行时打开它(当你打开视频流并在上面写入时),要打开你录制的视频,只需关闭应用程序结束对视频的写入,然后打开它。
关于c++ - 视频未写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162169/