opencv 用摄像头录制视频并储存的问题

代码如下#include"cv.h"#include"highgui.h"#include<iostream>#include<Windows.h>usingnamesp... 代码如下
#include "cv.h"
#include "highgui.h"
#include <iostream>
#include <Windows.h>
using namespace std;

int main(int argc,int* argv)
{
DWORD a,b;
CvCapture* capture;
capture=cvCreateCameraCapture(-1);
assert(capture!=NULL);
IplImage* frame;
double fps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
CvVideoWriter* writer=cvCreateVideoWriter("New.avi",CV_FOURCC('X','V','I','D'),5,cvSize(640,480));
cvNamedWindow("Video");
a=GetTickCount();
while (1)
{
frame=cvQueryFrame(capture);
if (!frame) break;
cvShowImage("Video",frame);
cvWriteFrame(writer,frame);
b=GetTickCount();
cout<<b-a<<endl;
if (cvWaitKey(200)>0) break;
a=b;
}
cvReleaseImage(&frame);
cvReleaseVideoWriter(&writer);
cvDestroyWindow("Video");
return 0;
}

其中a表示录制上一帧录制完毕的时间 b表示这一帧录制完毕的时间。
但是录制下来的帧率只能在5以下
同样的程序
当我 cvWaitKey(1)时储存并显示一张图耗费170ms左右
但是cvWaitKey(200)也只耗费203ms
cvWaitKey(2000)耗费2012ms
为什么耗时会这么奇怪 在等待1ms时耗时170ms 而等待200ms时只耗时203ms?
还有 如何提高帧率 如果我将cvCreaterVideoWriter里的帧率调的更高的话 视频就和快进了一样
展开
 我来答
匿名用户
2014-01-20
展开全部
cvWaitKey的时间精度可能达不到你的精度
改变cvCreaterVideoWriter里面的帧率并将cvWaitKey的时间改为1000/帧率
追问
但我设为cvWaitKey(1)他运行还是要170ms啊 缩不短了 每秒五帧的视频看起来很难受的
追答
这可能是因为你的其他地方调用消耗时间太多了,比如你的主板性能不佳,抓取一帧影像要耗费一段时间,写入也要时间的
cvWaitKey精度是不高,但是也不会像你说的那样很低
你可以用缓冲区,多线程等方法来提升帧频
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chr1999
2014-01-20 · TA获得超过1056个赞
知道小有建树答主
回答量:2462
采纳率:0%
帮助的人:1241万
展开全部
cvWaitKey(2000)等待2000ms
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式