opencv如何提取关键帧,比如读取视频时长,每二十分之一时长提取帧并保存

awful199baayng 2015-07-14 09:13:00
以这个为例,如何读取视频长度,比如1分钟,然后每3秒钟提取一次关键帧并保存下来
#include <opencv2\highgui\highgui.hpp>
int main(int argc,char** argv[])
{
cvNamedWindow("视频显示",CV_WINDOW_AUTOSIZE);

CvCapture* capture = cvCreateFileCapture("E:\\Android.mp4");


IplImage* frame;
while(1)
{
frame = cvQueryFrame(capture);
if (!frame) break;
cvShowImage("视频显示",frame);
char c = cvWaitKey(33);
if(c==27)break;
}
cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES,1.0);
IplImage* image = cvQueryFrame(capture);
cvSaveImage("I:/8/.bmp",image);


cvReleaseCapture(&capture);
cvDestroyWindow("视频显示");
}


...全文
9231 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qeqlangzi 2015-10-21
  • 打赏
  • 举报
回复
建议用 ffmpeg , 实际跑下来平均每 12 帧有一个关键帧
C_amateur 2015-07-15
  • 打赏
  • 举报
回复
cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES,time_frame);
  
			image = cvQueryFrame(capture); //获取一帧图片
  
            sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");//保存的图片名
  
			cvSaveImage( image_name, image);   //保存一帧图片

			time_frame=time_frame+numFrames/20;
				
			if(time_frame >= numFrames) break;
赵4老师 2015-07-14
  • 打赏
  • 举报
回复
比如视频的帧率为30帧/秒,则3秒就是90帧,每调用cvQueryFrame()90次,cvSaveImage一次即可。

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧