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

C++ OpenCV,从相机捕获并保存到文件,c++,opencv,C++,Opencv,我想在openCV中构建一个简单的应用程序,从摄像头捕获视频并将其存储到文件中。问题是: 1-如何访问我的相机的帧速率。cvGetCaptureProperty()始终返回零的FPS值 2-如何控制捕获时间,例如,如何将捕获时间限制为10秒 这是我的密码 void main( ){ CvCapture *capture = cvCaptureFromCAM( 0 ); int width = ( int )cvGetCaptureProperty( capture, CV_CA

我想在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(编辑):根据,有必要致电

cvQueryFrame(capture);
首先,为了获得正确的属性。重试呼叫

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

2:您可以使用cvWaitKey(毫秒)或简单的睡眠。您是如何拍摄图像的,您的循环是什么样子的?

1(编辑):根据,需要调用

cvQueryFrame(capture);
首先,为了获得正确的属性。重试呼叫

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


2:您可以使用cvWaitKey(毫秒)或简单的睡眠。您是如何拍摄图像的,您的环路是什么样子的?

1-并非所有摄像头都提供帧速率,这取决于其驱动程序支持的帧速率

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

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

}
//假设您想要10秒3fps=总共300帧

对于(int-iframe=0;iframe1)-并非所有摄像头都会提供帧速率,这取决于其驱动程序支持的内容

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

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

}
//假设您想要10秒3fps=总共300帧

对于(int-iframe=0;iframe当我写你写的代码行时,我得到fps=0,请注意我正在从相机中捕获…并查看我的后期更新以查看我试图执行的代码结果文件的帧速率高于我在Cam上看到的帧速率这是可能的,而部分源帧被多次保存。但是作为压缩当我写你写的代码行时,我得到fps=0,请注意我是从一台相机上拍摄的…看看我的后期更新,看看我试图执行的代码结果文件的帧速率比我在Cam上看到的高这是可能的,而部分源帧是保存的多次。但是由于压缩补偿了这一点,您不应该有任何缺点。