c++OpenCV摄像头保存视频和图像

举报
风吹稻花香 发表于 2021/06/04 23:34:00 2021/06/04
【摘要】   #include <QCoreApplication>#include "highgui.h"//包含OpenCV库头文件#include "cv.h"using namespace std; int main( int argc, char** argv ) {//主函数 cvNamedWindow("Example2", CV_WINDOW_A...

 


  
  1. #include <QCoreApplication>
  2. #include "highgui.h"//包含OpenCV库头文件
  3. #include "cv.h"
  4. using namespace std;
  5. int main( int argc, char** argv ) {//主函数
  6. cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE );//创建窗口,(名字,默认大小)
  7. CvCapture *capture = NULL;// 视频获取结构,用来作为视频获取函数的一个参数
  8. CvVideoWriter *video=NULL;
  9. int n;
  10. capture = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频
  11. if(!capture) //如果不能打开摄像头给出警告
  12. {
  13. // cout<<"Can not open the camera."<<endl;
  14. return -1;
  15. }
  16. IplImage* frame;//申请IplImage类型指针,就是申请内存空间来存放每一帧图像
  17. int i=0;
  18. while(1)
  19. {
  20. frame = cvQueryFrame( capture );// 从摄像头中抓取并返回每一帧
  21. if( !frame ) break;//如果抓取帧为空 break 打破循环否则将抓取的那一帧显示在创建的窗口上
  22. //创建cvvideowriter对象并分配空间,保存文件名为camera.avi,编码要在运行时选择,大小就是摄像头视频的大小,帧率为32
  23. if(i==0)
  24. video=cvCreateVideoWriter("camera.avi",CV_FOURCC('X', 'V', 'I', 'D'),25,cvSize(frame->width,frame->height)); //创建CvVideoWriter对象并分配空间
  25. // video=cvCreateVideoWriter("camera.avi",CV_FOURCC('M','P','4','3'),15,cvSize(frame->width,frame->height),1);
  26. if(video)
  27. {
  28. //cout<<"video writer has created!"<<endl;
  29. }
  30. n=cvWriteFrame(video,frame);
  31. printf("cvWriteFrame %d\n", n);
  32. i++;
  33. //cout<<n<<endl;
  34. cvShowImage( "Example2", frame );//在窗口上显示每一帧
  35. char c = cvWaitKey(33);//延时,每秒钟约33帧;符合人眼观看速度;
  36. if( c == 27 ) break;
  37. // cvReleaseImage(&frame);
  38. //由于是死循环,而且没有控制台,当按下键盘esc键,将按键的ASCII值给C,如果C为ESC(ASCII 为27)循环退出退出循环;
  39. }
  40. cvReleaseVideoWriter(&video);
  41. cvReleaseCapture( &capture );//释放内存;
  42. cvDestroyWindow( "Example2" );//销毁窗口
  43. return 0;
  44. }

 

 

  
  1. <QCoreApplication>
  2. #include "highgui.h"//包含OpenCV库头文件
  3. #include "cv.h"
  4. using namespace std;
  5. int main( int argc, char** argv ) {//主函数
  6. cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE );//创建窗口,(名字,默认大小)
  7. CvCapture *capture = NULL;// 视频获取结构,用来作为视频获取函数的一个参数
  8. CvVideoWriter *video=NULL;
  9. int n;
  10. capture = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频
  11. if(!capture) //如果不能打开摄像头给出警告
  12. {
  13. // cout<<"Can not open the camera."<<endl;
  14. return -1;
  15. }
  16. IplImage* frame;//申请IplImage类型指针,就是申请内存空间来存放每一帧图像
  17. int i=0;
  18. while(1)
  19. {
  20. frame = cvQueryFrame( capture );// 从摄像头中抓取并返回每一帧
  21. if( !frame ) break;//如果抓取帧为空 break 打破循环否则将抓取的那一帧显示在创建的窗口上
  22. //创建cvvideowriter对象并分配空间,保存文件名为camera.avi,编码要在运行时选择,大小就是摄像头视频的大小,帧率为32
  23. if(i==0)
  24. video=cvCreateVideoWriter("camera.avi",CV_FOURCC('X', 'V', 'I', 'D'),25,cvSize(frame->width,frame->height)); //创建CvVideoWriter对象并分配空间
  25. // video=cvCreateVideoWriter("camera.avi",CV_FOURCC('M','P','4','3'),15,cvSize(frame->width,frame->height),1);
  26. if(video)
  27. {
  28. //cout<<"video writer has created!"<<endl;
  29. }
  30. n=cvWriteFrame(video,frame);
  31. printf("cvWriteFrame %d\n", n);
  32. i++;
  33. //cout<<n<<endl;
  34. cvShowImage( "Example2", frame );//在窗口上显示每一帧
  35. char c = cvWaitKey(33);//延时,每秒钟约33帧;符合人眼观看速度;
  36. if( c == 27 ) break;
  37. // cvReleaseImage(&frame);
  38. //由于是死循环,而且没有控制台,当按下键盘esc键,将按键的ASCII值给C,如果C为ESC(ASCII 为27)循环退出退出循环;
  39. }
  40. cvReleaseVideoWriter(&video);
  41. cvReleaseCapture( &capture );//释放内存;
  42. cvDestroyWindow( "Example2" );//销毁窗口
  43. return 0;
  44. }

 

下面是保存图片的例子:


  
  1. int main4()
  2. {
  3. CvCapture* capture=cvCaptureFromCAM(-1);
  4. CvVideoWriter* video=NULL;
  5. IplImage* frame=NULL;
  6. int n;
  7. if(!capture) //如果不能打开摄像头给出警告
  8. {
  9. //cout<<"Can not open the camera."<<endl;
  10. return -1;
  11. }
  12. else
  13. {
  14. frame=cvQueryFrame(capture); //首先取得摄像头中的一帧
  15. video=cvCreateVideoWriter("camera.avi",-1,32,
  16. cvSize(frame->width,frame->height)); //创建CvVideoWriter对象并分配空间
  17. //保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32
  18. if(video) //如果能创建CvVideoWriter对象则表明成功
  19. {
  20. //cout<<"VideoWriter has created."<<endl;
  21. }
  22. cvNamedWindow("Camera Video",1); //新建一个窗口
  23. while(1)
  24. {
  25. frame=cvQueryFrame(capture); //从CvCapture中获得一帧
  26. if(!frame)
  27. {
  28. //cout<<"Can not get frame from the capture."<<endl;
  29. break;
  30. }
  31. char ImagesName[1024];
  32. sprintf(ImagesName, "Image%.3d.bmp", n);
  33. cvSaveImage(ImagesName, frame);
  34. n=cvWriteFrame(video,frame); //判断是否写入成功,如果返回的是1,表示写入成功
  35. //cout<<n<<endl;
  36. cvShowImage("Camera Video",frame); //显示视频内容的图片
  37. if(cvWaitKey(2)>0) break; //有其他键盘响应,则退出
  38. }
  39. cvReleaseVideoWriter(&video);
  40. cvReleaseCapture(&capture);
  41. cvDestroyWindow("Camera Video");
  42. }
  43. return 0;
  44. }

 


  
  1. main4()
  2. {
  3. CvCapture* capture=cvCaptureFromCAM(-1);
  4. CvVideoWriter* video=NULL;
  5. IplImage* frame=NULL;
  6. int n;
  7. if(!capture) //如果不能打开摄像头给出警告
  8. {
  9. //cout<<"Can not open the camera."<<endl;
  10. return -1;
  11. }
  12. else
  13. {
  14. frame=cvQueryFrame(capture); //首先取得摄像头中的一帧
  15. video=cvCreateVideoWriter("camera.avi",-1,32,
  16. cvSize(frame->width,frame->height)); //创建CvVideoWriter对象并分配空间
  17. //保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32
  18. if(video) //如果能创建CvVideoWriter对象则表明成功
  19. {
  20. //cout<<"VideoWriter has created."<<endl;
  21. }
  22. cvNamedWindow("Camera Video",1); //新建一个窗口
  23. while(1)
  24. {
  25. frame=cvQueryFrame(capture); //从CvCapture中获得一帧
  26. if(!frame)
  27. {
  28. //cout<<"Can not get frame from the capture."<<endl;
  29. break;
  30. }
  31. char ImagesName[1024];
  32. sprintf(ImagesName, "Image%.3d.bmp", n);
  33. cvSaveImage(ImagesName, frame);
  34. n=cvWriteFrame(video,frame); //判断是否写入成功,如果返回的是1,表示写入成功
  35. //cout<<n<<endl;
  36. cvShowImage("Camera Video",frame); //显示视频内容的图片
  37. if(cvWaitKey(2)>0) break; //有其他键盘响应,则退出
  38. }
  39. cvReleaseVideoWriter(&video);
  40. cvReleaseCapture(&capture);
  41. cvDestroyWindow("Camera Video");
  42. }
  43. return 0;
  44. }

 

 

 

 

 

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/54607863

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。