C++ Opencv video writer仅写入128字节的文件(os x el capitan)

C++ Opencv video writer仅写入128字节的文件(os x el capitan),c++,macos,opencv,C++,Macos,Opencv,所以我现在尝试了几段代码,或多或少都很相似,它们都只生成一个128字节的文件。我想将网络摄像头流记录到文件中 我不相信这是一个编解码器的问题,我尝试了所有这些,我仍然只有128字节。有人知道这里有什么问题吗?到目前为止,我只在MacOS X上试用过 例如下面的代码: #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> int main( int argc, char** argv )

所以我现在尝试了几段代码,或多或少都很相似,它们都只生成一个128字节的文件。我想将网络摄像头流记录到文件中

我不相信这是一个编解码器的问题,我尝试了所有这些,我仍然只有128字节。有人知道这里有什么问题吗?到目前为止,我只在MacOS X上试用过

例如下面的代码:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

int main( int argc, char** argv ) {
CvCapture* capture;

capture = cvCreateCameraCapture(0);

assert( capture != NULL );

IplImage* bgr_frame = cvQueryFrame( capture );

CvSize size = cvSize(
                     (int)cvGetCaptureProperty( capture,
                                               CV_CAP_PROP_FRAME_WIDTH),
                     (int)cvGetCaptureProperty( capture,
                                               CV_CAP_PROP_FRAME_HEIGHT)
                     );

cvNamedWindow( "Webcam", CV_WINDOW_AUTOSIZE );

CvVideoWriter *writer = cvCreateVideoWriter(    "vidtry.AVI",
                                            CV_FOURCC('A','V','C','1'),
                                            30,
                                        size
                                            );

while( (bgr_frame = cvQueryFrame( capture )) != NULL ) 
{
     cvWriteFrame(writer, bgr_frame );
     cvShowImage( "Webcam", bgr_frame );
     char c = cvWaitKey( 33 );
     if( c == 27 ) break;
}
cvReleaseVideoWriter( &writer );
cvReleaseCapture( &capture );
cvDestroyWindow( "Webcam" );
return( 0 );
}
#包括
#包括
int main(int argc,字符**argv){
捕获*捕获;
捕获=cvCreateCameraCapture(0);
断言(捕获!=NULL);
IplImage*bgr_frame=cvQueryFrame(捕获);
CvSize size=CvSize(
(int)cvGetCaptureProperty(捕获,
CV_盖_支柱_框架_宽度),
(int)cvGetCaptureProperty(捕获,
CV(盖、支柱、框架、高度)
);
cvNamedWindow(“网络摄像头”,CV_窗口_自动调整大小);
CvVideoWriter*writer=cvCreateVideoWriter(“vidtry.AVI”,
CV_FOURCC('A','V','C','1'),
30,
大小
);
而((bgr_frame=cvQueryFrame(capture))!=NULL)
{
cvWriteFrame(writer,bgr_帧);
cvShowImage(“网络摄像头”,bgr_帧);
char c=cvWaitKey(33);
如果(c==27)断开;
}
cvReleaseVideoWriter(&writer);
cvReleaseCapture(&capture);
视频窗口(“网络摄像头”);
返回(0);
}

尝试不同的编解码器,如mjpg,并确保opencv\u ffmpeg dll对应用程序可用。我几乎尝试了所有编解码器。为什么我需要dll(顺便说一句,我在mac上)。如果可以的话,我宁愿避免使用ffmpeg。有人吗?在windows上,opencv在内部使用ffmpeg,并提供一个特殊的dll。如果dll不存在,videowriter只创建一个(几乎)空的文件,没有任何错误。不知道osx是怎么处理的。谢谢米卡。有没有办法不用ffmpeg?和opencv函数来编写视频?我不这么认为,但不能保证。