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,从相机捕获并保存到文件的主要内容,如果未能解决你的问题,请参考以下文章