opencv 保存摄像头视频 如何设置帧率
我先这样获得摄像头视频参数Play_video.m_width=(int)cvGetCaptureProperty(Play_video.m_capture,CV_CAP...
我先这样获得摄像头视频参数
Play_video.m_width= (int) cvGetCaptureProperty(Play_video.m_capture, CV_CAP_PROP_FRAME_WIDTH);
Play_video.m_height=(int)cvGetCaptureProperty(Play_video.m_capture, CV_CAP_PROP_FRAME_HEIGHT);
Play_video.m_fps=(int)cvGetCaptureProperty(Play_video.m_capture, CV_CAP_PROP_FPS);
然后保存视频
Play_dlg.Save_Video=cvCreateVideoWriter(savename,CV_FOURCC('X','V','I','D'),Play_video.m_fps,cvSize(Play_video.m_width,Play_video.m_height));
运行后保存的视频打不开,显示“空白或破损文件”
如果我把第三个代表帧率的参数设置成30,就没问题了。
但是我先把保存视频按摄像头原始视频的帧率保存,请问应该怎么写代码呢?
最后一句是“我想把保存视频按摄像头原始视频的帧率保存“,打错了个字 展开
Play_video.m_width= (int) cvGetCaptureProperty(Play_video.m_capture, CV_CAP_PROP_FRAME_WIDTH);
Play_video.m_height=(int)cvGetCaptureProperty(Play_video.m_capture, CV_CAP_PROP_FRAME_HEIGHT);
Play_video.m_fps=(int)cvGetCaptureProperty(Play_video.m_capture, CV_CAP_PROP_FPS);
然后保存视频
Play_dlg.Save_Video=cvCreateVideoWriter(savename,CV_FOURCC('X','V','I','D'),Play_video.m_fps,cvSize(Play_video.m_width,Play_video.m_height));
运行后保存的视频打不开,显示“空白或破损文件”
如果我把第三个代表帧率的参数设置成30,就没问题了。
但是我先把保存视频按摄像头原始视频的帧率保存,请问应该怎么写代码呢?
最后一句是“我想把保存视频按摄像头原始视频的帧率保存“,打错了个字 展开
3个回答
展开全部
opencv读取视频,摄像头,保存视频最基础的代码
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage* frame = 0;
capture = cvCaptureFromCAM( 0 );
//capture = cvCaptureFromAVI("1.wmv");//播放视频 就换成这句
int fps=25; //捕捉帧率
//double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); //视频帧率
CvVideoWriter* writer = 0; //保存就加上这句
int isColol=1;
int frameW=640;
int frameH=480;
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('F','L','V','1'),fps,cvSize(frameW,frameH),isColol);
cvNamedWindow( "摄像头", 1 );
//for(int i=0;i<50;i++) //2秒
for(;;) //一直读
{
frame = cvQueryFrame( capture );
cvWriteFrame(writer,frame );
cvShowImage( "摄像头", frame ); //显示一帧图像
cvWaitKey(1000 / fps);//视频速度
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&frame);
cvReleaseCapture( &capture );
cvDestroyWindow("摄像头");
return 0;
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage* frame = 0;
capture = cvCaptureFromCAM( 0 );
//capture = cvCaptureFromAVI("1.wmv");//播放视频 就换成这句
int fps=25; //捕捉帧率
//double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); //视频帧率
CvVideoWriter* writer = 0; //保存就加上这句
int isColol=1;
int frameW=640;
int frameH=480;
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('F','L','V','1'),fps,cvSize(frameW,frameH),isColol);
cvNamedWindow( "摄像头", 1 );
//for(int i=0;i<50;i++) //2秒
for(;;) //一直读
{
frame = cvQueryFrame( capture );
cvWriteFrame(writer,frame );
cvShowImage( "摄像头", frame ); //显示一帧图像
cvWaitKey(1000 / fps);//视频速度
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&frame);
cvReleaseCapture( &capture );
cvDestroyWindow("摄像头");
return 0;
展开全部
我猜是Play_video.m_fps=(int)cvGetCaptureProperty(Play_video.m_capture, CV_CAP_PROP_FPS);
这个函数可能没有获取到正常的值。调试看一下这个值是多少
其实摄像头的原始帧率就是30的
这个函数可能没有获取到正常的值。调试看一下这个值是多少
其实摄像头的原始帧率就是30的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
实际上在你获取摄像机的时候就能获取到摄像机的硬件帧率。比如摄像机是30帧每秒的,你就不能录指出60帧每秒的视频了。如果要调整到更低帧率的话,直接把你需要的帧率与摄像机的帧率做一下计算,就能得到“每获得多少帧需要丢弃1帧”。比如你是用30帧每秒的摄像机,但需要15帧每秒的视频,那就每获得2帧丢弃1帧就行了。变为25帧就可以每获得6帧丢弃1帧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询