OpenCV,从相机捕获并保存到文件

Posted

技术标签:

【中文标题】OpenCV,从相机捕获并保存到文件【英文标题】:OpenCV, capturing from camera and saving to file 【发布时间】:2010-12-03 14:17:48 【问题描述】:

我想在 openCV 中构建一个简单的应用程序,从摄像头捕获视频并将其存储到文件中。问题是:

1- 如何访问我的相机的帧速率。 cvGetCaptureProperty() 始终返回 FPS 值为零。

2- 请问如何控制捕获的时间,例如,如何将捕获时间限制为 10 秒...

这是我的代码

void main( )

    CvCapture *capture = cvCaptureFromCAM( 0 );
    int width = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH );
    int height = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT );
    CvVideoWriter *writer = cvCreateVideoWriter( "myCamCapture.avi", -1, 30, cvSize( width, height ) );
    cvNamedWindow("d", CV_WINDOW_AUTOSIZE);
    IplImage *frame = 0;

    while( 1 )
    
        frame = cvQueryFrame( capture );
        cvShowImage("d",frame);
        cvWriteFrame( writer, frame );
        char c = cvWaitKey( 30 );
        if( c == 27 ) break;
    

提前谢谢你

【问题讨论】:

【参考方案1】:

1(编辑):根据this site near the bottom of the page,需要调用

cvQueryFrame(capture);

首先为了得到正确的属性。重试调用

int fps       = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);

之后

2:您可以使用 cvWaitKey(milliseconds) 或简单地睡眠。你是如何捕捉图像的,你的循环是什么样的?

【讨论】:

当我写下你写的那行代码时,我得到 fps=0,请注意我正在从相机捕捉....并查看我的帖子更新以查看我正在尝试执行的代码 生成的文件的帧速率比我在 cam 上看到的要高 这是可能的,但源帧的一部分被多次保存。但由于压缩弥补了这一点,你不应该有任何缺点。【参考方案2】:

1 - 并非所有相机都会提供取决于其驱动程序支持的帧速率。

2 - 要捕获 10 秒的视频,只需计算这是多少帧,而不是 while(1) - 永远运行,执行类似的操作。

// assumign you want 10seconds of 3fps = 300 frames total
for (int iframe=0;iframe<300;iframe++) 


【讨论】:

以上是关于OpenCV,从相机捕获并保存到文件的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV,捕获的视频比原始相机视频运行得更快!

OpenCV & Virsual C++:从相机中保存帧数据,然后保存到 Jpg

如何从opencv中的捕获设备(相机)获取最新帧

OpenCV FFMPEG RTSP 相机馈送错误

VC++ OpenCV 项目在发布模式下不显示相机实时捕获

从 2 个摄像头捕获(OpenCV、Python)