从Raspicam捕获视频的慢帧速率

Slow Framerate Capturing Video from Raspicam

本文关键字:帧速率 视频 Raspicam      更新时间:2023-10-16

我正在尝试使用树莓派相机录制视频。我想用openCV来录制,因为当我完成这项工作时,我会做更多的处理。

我在这里使用raspcam/rraspcam_cv库。我可以打开相机,读取cv::Mat,并创建视频,但帧速率在1-2Hz之间。

我的代码在这里:


#include <ctime>
#include <iostream>
#include <raspicam/raspicam_cv.h>
#include <cstdio>
using namespace std; 
int main ( int argc,char **argv ) {
    time_t timer_begin,timer_end;
    raspicam::RaspiCam_Cv Camera;
    cv::Mat image;
    int nCount=100;
    cout<<"Opening Camera..."<<endl;
    if (!Camera.open()) {cerr<<"Error opening the camera"<<endl;return -1;}
    cout<<"Capturing "<<nCount<<" frames ...."<<endl;
    time ( &timer_begin );
    cv::VideoWriter writer("Avideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 30, cv::Size(1280,960), true);
 for ( int i=0; i<nCount; i++ ) {
    char name[32] = {0};
        Camera.grab();
        Camera.retrieve ( image);
    writer.write(image);    
    }
    cout<<"Stop camera..."<<endl;
    Camera.release();
    time ( &timer_end ); /* get current time; same as: timer = time(NULL)  */
    double secondsElapsed = difftime ( timer_end,timer_begin );
    cout<< secondsElapsed<<" seconds for "<< nCount<<"  frames : FPS = "<<  ( float ) ( ( float ) ( nCount ) /secondsElapsed ) <<endl;
}

当我运行程序raspivid时,我可以看到似乎以30赫兹运行的视频,这正是我想要实现的。

出于某种原因,我也只能使用1280x960大小来运行此代码。

如果有人能给我一些建议,那就太好了。

raspicam::RaspiCam_Cv的默认大小为1280*960,您可以使用get获得:

double RaspiCam_Cv::get ( int propId );

例如:

Camera.get(CV_CAP_PROP_FRAME_WIDTH);
Camera.get(CV_CAP_PROP_FRAME_HEIGHT);

如果您想要其他尺寸,可以使用set设置:

bool RaspiCam_Cv::set ( int propId, double value );

例如:

Camera.set(CV_CAP_PROP_FRAME_WIDTH,640);
Camera.set(CV_CAP_PROP_FRAME_HEIGHT,480);

可以获取/设置的其他属性包括:

 * CV_CAP_PROP_FRAME_WIDTH,CV_CAP_PROP_FRAME_HEIGHT,
 * CV_CAP_PROP_FORMAT: CV_8UC1 or CV_8UC3
 * CV_CAP_PROP_BRIGHTNESS: [0,100]
 * CV_CAP_PROP_CONTRAST: [0,100]
 * CV_CAP_PROP_SATURATION: [0,100]
 * CV_CAP_PROP_GAIN: (iso): [0,100]
 * CV_CAP_PROP_EXPOSURE: -1 auto. [1,100] shutter speed from 0 to 33ms
 * CV_CAP_PROP_WHITE_BALANCE_RED_V : [1,100] -1 auto whitebalance
 * CV_CAP_PROP_WHITE_BALANCE_BLUE_U : [1,100] -1 auto whitebalance
 * CV_CAP_PROP_MODE : [1,7] 0 auto mode

PS:cv::VideoWriter的FPS和大小必须与raspicam::RaspiCam_Cv相同,否则cv::VideoWriter将永远无法工作。