OpenCV从AVI视频提取图片

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

使用OpenCV提取AVI里的视频(不限制avi格式,只要opencv支持的格式都行,同样来源也可以是摄像头),每隔几帧保存一张。

1.使用cvGrabFrame()+cvRetrieveFrame()

#include <iostream>#include <cv.h>#include <cxcore.h>#include <highgui.h>#pragma comment(lib, "ml.lib")#pragma comment(lib, "cv.lib")#pragma comment(lib, "cvaux.lib")#pragma comment(lib, "cvcam.lib")#pragma comment(lib, "cxcore.lib")#pragma comment(lib, "cxts.lib")#pragma comment(lib, "highgui.lib")#pragma comment(lib, "cvhaartraining.lib")int main(){ CvCapture *capture = NULL; IplImage *frame = NULLchar *AviFileName = "D:\\clock.avi";//视频的目录 char *AviSavePath = "D:\\截图\\";//图片保存的位置 const int jiange = 2;//间隔两帧保存一次图片 capture = cvCaptureFromAVI(AviFileName); cvNamedWindow("AVI player",1); int count_tmp = 0;//计数总帧数 char tmpfile[100]={'\0'}; while(true) {  if(cvGrabFrame(capture))  {   if (count_tmp % jiange == 0)   {    frame=cvRetrieveFrame(capture);    cvShowImage("AVI player",frame);//显示当前帧    sprintf(tmpfile,"%s//%d.jpg",AviSavePath,count_tmp);//使用帧号作为图片名    cvSaveImage(tmpfile,frame);   }       if(cvWaitKey(10)>=0) //延时    break;   ++count_tmp;  }  else  {   break;  } } cvReleaseCapture(&capture); cvDestroyWindow("AVI player");  std::cout<<"总帧数" << count_tmp << std::endlreturn 0;}


2.使用 cvQueryFrame()

#include <iostream>#include <cv.h>#include <cxcore.h>#include <highgui.h>#pragma comment(lib, "ml.lib")#pragma comment(lib, "cv.lib")#pragma comment(lib, "cvaux.lib")#pragma comment(lib, "cvcam.lib")#pragma comment(lib, "cxcore.lib")#pragma comment(lib, "cxts.lib")#pragma comment(lib, "highgui.lib")#pragma comment(lib, "cvhaartraining.lib")int main(){ CvCapture *capture = NULL; IplImage *frame = NULLchar *AviFileName = "D:\\clock.avi"char *AviSavePath = "D:\\截图2\\"const int jiange = 2;//间隔两帧保存一次图片 capture = cvCaptureFromAVI(AviFileName); cvNamedWindow("AVI player",1); int count_tmp = 0;//计数 总帧数 char tmpfile[100] = {'\0'}; while( (frame = cvQueryFrame(capture)) != NULL) {  if (count_tmp % jiange == 0)  {   cvShowImage("AVI player", frame);//显示当前帧   sprintf(tmpfile,"%s//%d.jpg", AviSavePath, count_tmp);//使用帧号作为图片名   cvSaveImage(tmpfile, frame);  }      if(cvWaitKey(10)>=0) //延时  { break; }  ++count_tmp; } cvReleaseCapture(&capture); cvDestroyWindow("AVI player");  std::cout << "总帧数" << count_tmp << std::endlreturn 0;}

参考资料:

OpenCV 获取摄像头,新建窗口显示摄像头视频

http://www.cnblogs.com/Anykong/archive/2011/04/09/Anykong_OpenCV2.html

AVI文件的读取并显示

http://blog.csdn.net/lelekyle/article/details/5679135


ps:本人在opencv 2.4.1 + vs2010,编译上述代码通过,但运行出错(同事的就不出错),环境配置是没问题的,估计是库的问题。

而使用opencv 2.4.1+ vc6.0完全正常。不知是神马问题。



           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/ytffhew/article/details/84191385
今日推荐