从Raspicam捕获视频的慢帧速率
Slow Framerate Capturing Video from Raspicam
我正在尝试使用树莓派相机录制视频。我想用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
将永远无法工作。
相关文章:
- 使用专用显卡进行 OpenGL 渲染时帧速率较低
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 如何在IQualProp::get_AvgFrameRate中重置帧速率?
- 如何在不同的线程中保持一定的帧速率
- 根据帧速率缩放/缩小数字
- 将Kinect v2帧速率(rgb、深度、骨架)设置为每秒25帧
- 直接显示返回错误的帧速率 FPS
- SDL 帧速率上限实施
- 在 OpenGL 中,在保持良好帧速率的同时,VBO 中有多少个顶点的好目标是什么
- 视频流控制帧速率x264
- 使用C (Linux)更改BlueFox3相机的流帧速率
- EDSDK 捕获高帧速率
- OPENCV C 多线程以改善帧速率
- 使用 FFmpeg 库(不是 libav 分支)以编程方式捕获视频,在 C++ 中具有可变帧速率
- OpenCV:无法从视频中获取帧速率
- OpenCV视频处理帧速率下降
- 从Raspicam捕获视频的慢帧速率
- 如何使用 OpenCV 以固定帧速率 (fps) 播放任何视频
- OpenCV (C++) 无法获取 XVID 视频文件帧速率
- 媒体基础使用PROPVARI结构设置视频捕获帧速率