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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv 用摄像头录制视频并储存的问题相关的知识,希望对你有一定的参考价值。

代码如下
#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里的帧率调的更高的话 视频就和快进了一样

参考技术A cvWaitKey的时间精度可能达不到你的精度
改变cvCreaterVideoWriter里面的帧率并将cvWaitKey的时间改为1000/帧率追问

但我设为cvWaitKey(1)他运行还是要170ms啊 缩不短了 每秒五帧的视频看起来很难受的

追答

这可能是因为你的其他地方调用消耗时间太多了,比如你的主板性能不佳,抓取一帧影像要耗费一段时间,写入也要时间的
cvWaitKey精度是不高,但是也不会像你说的那样很低
你可以用缓冲区,多线程等方法来提升帧频

本回答被提问者采纳
参考技术B cvWaitKey(2000)等待2000ms

opencv不能录制桌面的视频吗?只能录制摄像头的视频

求opencv录制桌面视频的函数

参考技术A 录屏应该需要调用Windows的API吧追问

我已经有办法录制桌面(非windows API),但是opencv的方法没用过,不会用,网上的都是摄像头录制

以上是关于opencv 用摄像头录制视频并储存的问题的主要内容,如果未能解决你的问题,请参考以下文章

openCV录制视频

使用 opencv 和 pyaudio 从网络摄像头录制视频和音频

Opencv/c++ - 在线程中录制实时视频,在另一个线程中处理图像?

Quickblox 更换摄像头并录制视频聊天

录制的开发框架视频

android 采集摄像头预览帧,使用opencv和MediaCodec直接录制水印滤镜视频