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里的帧率调的更高的话 视频就和快进了一样 展开
#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里的帧率调的更高的话 视频就和快进了一样 展开
2个回答
2014-01-20
展开全部
cvWaitKey的时间精度可能达不到你的精度
改变cvCreaterVideoWriter里面的帧率并将cvWaitKey的时间改为1000/帧率
改变cvCreaterVideoWriter里面的帧率并将cvWaitKey的时间改为1000/帧率
追问
但我设为cvWaitKey(1)他运行还是要170ms啊 缩不短了 每秒五帧的视频看起来很难受的
追答
这可能是因为你的其他地方调用消耗时间太多了,比如你的主板性能不佳,抓取一帧影像要耗费一段时间,写入也要时间的
cvWaitKey精度是不高,但是也不会像你说的那样很低
你可以用缓冲区,多线程等方法来提升帧频
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询