从 Raspicam 捕获慢帧率视频
Posted
技术标签:
【中文标题】从 Raspicam 捕获慢帧率视频【英文标题】:Slow Framerate Capturing Video from Raspicam 【发布时间】:2016-04-12 11:06:26 【问题描述】:我正在尝试使用 Raspberry Pi 相机录制视频。我想用openCV来做录音,因为当我有这个工作时,我会做更多的处理。
我正在使用来自here 的 raspicam/raspicam_cv 库。我可以打开相机并读取 cv::Mat 并创建视频,但帧速率在 1-2 Hz 之间。
我的代码在这里:
#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 Hz 运行的视频,这是我想要实现的。
由于某种原因,我也只能使用 1280x960 尺寸使此代码工作。
如果有人能给我一些建议,那就太好了。
【问题讨论】:
请首先确定是哪一行导致速度变慢。例如,我会先将视频作者writer.write(image);
注释掉,看看这对速度有何影响。
注释掉 writer.write(image)
会使视频精确到 10 Hz
请提供raspivid的cpp代码链接进行比较。
sourceforge.net/projects/raspicam/files/raspicam-0.1.3.zip/…
源代码中没有 rapisvid 文件/项目。你是说 raspicam_cv_test 吗?
【参考方案1】:
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
将永远无法工作。
【讨论】:
以上是关于从 Raspicam 捕获慢帧率视频的主要内容,如果未能解决你的问题,请参考以下文章
从 onCameraFrame、OpenCV、Android/Java 调用 HoughCircles() 方法时改变慢帧速率