Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opencv和ffmpeg 0千字节文件_C++_Opencv - Fatal编程技术网

C++ opencv和ffmpeg 0千字节文件

C++ opencv和ffmpeg 0千字节文件,c++,opencv,C++,Opencv,我是OpenCV新手,尝试用ffmpeg录制简单的视频,但每次的大小都是0kb。。。我成功使用Cinepak编解码器,但视频录制速度很快,或者我将fps设置为4,并将cwWaitKey(20)。。这是我正在尝试的代码 cvNamedWindow("Webcam", CV_WINDOW_AUTOSIZE); CvCapture *cap; cap = cvCreateCameraCapture(0); IplImage *img; img = cvQueryFrame(ca

我是OpenCV新手,尝试用ffmpeg录制简单的视频,但每次的大小都是0kb。。。我成功使用Cinepak编解码器,但视频录制速度很快,或者我将fps设置为4,并将cwWaitKey(20)。。这是我正在尝试的代码

    cvNamedWindow("Webcam", CV_WINDOW_AUTOSIZE);
    CvCapture *cap; cap = cvCreateCameraCapture(0);
    IplImage *img; img = cvQueryFrame(cap);
    CvVideoWriter *writer;
    double fps = cvGetCaptureProperty(cap, CV_CAP_PROP_FPS);
    int camWidth = (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH);
    int camHeight = (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT);
    CvSize size = cvSize(camWidth, camHeight);
    writer = cvCreateVideoWriter("record.avi", CV_FOURCC('M','J','P','G'), fps, size);

    while(cvQueryFrame(cap))
    {
        img = cvRetrieveFrame(cap);
        cvWriteFrame(writer, img);
        cvShowImage("Webcam", img);
        cvWaitKey(20);
    }
//在这里放东西

有人能告诉我我做错了什么吗?多谢各位

另外,我也试过其他四个C,但结果还是一样,文件是0千字节,没有写任何东西。。帮助:( 尝试了四种:XVID、MP4V、FVFW、MPEG、MPG1/2、WM1/2

p.p.S使用Windows 7 x64,安装了ffmpeg x86和x64两个版本。

对我来说已经有一段时间了(4年前在大学做过类似的事情),但据我所知,并非所有Windows上可用的编解码器都包括编码器和解码器。它们中的大多数可能只是解码器。因此,一些FourCC可以工作,而另一些会产生错误,或者根本无法工作

FFMPEG提供了几种编解码器,但我认为它们在OpenCV中是不可用的:我认为它们是作为DirectShow过滤器提供的,而OpenCV使用的是经典的Windows视频界面(这里我可能错了,请随意更正)


您遇到的计时问题很容易解释:如果您将视频的fps设置为4,则必须确保每秒仅拍摄和粘贴4张图像。否则,您实际上是在创建慢动作或延时视频。有更优雅的方法,但使用基本的OpenCV功能,这可能已经是最简单的解决方案。

修复。。我刚刚下载了DIVX编解码器,安装了它,并使用了DIVX fourcc,它的工作方式很有魅力。 但是我在计算帧数时仍然有问题,呵呵:-)
10帧每秒等于100帧,但我以25帧每秒的速度失败。。25*10不工作。

嗨,他们好,你能告诉我应该使用哪个编码器/解码器工作吗?
等待时间=1000.0f/fps
(毫秒)。10fps意味着每秒10帧,因此您必须在捕获帧之间等待100ms,但是不要忽略处理图像所用的额外时间(因此您基本上必须等待不到100ms)。您好,我这样做:[code]for(int-iframe=0;iframe