使用OpenCV进行视频读写

来源:互联网 发布:sql server2008和2014 编辑:程序博客网 时间:2024/05/30 05:20

OpenCV视频读写的代码,用的是其C++形式的API。输入文件为完全无压缩的avi格式视频文件。

[cpp] view plaincopyprint?
  1. #include <opencv/cxcore.h>  
  2. #include <opencv/highgui.h>  
  3. #include <opencv/cv.h>  
  4.   
  5. #undef RC_OPENCV_2_1_0  
  6.   
  7. #ifdef _DEBUG  
  8. #ifdef RC_OPENCV_2_1_0  
  9. #pragma comment( lib, "cxcore210d.lib" )  
  10. #pragma comment( lib, "cv210d.lib" )  
  11. #pragma comment( lib, "highgui210d.lib" )         
  12. #else  
  13. #pragma comment( lib, "opencv_core220d.lib" )  
  14. #pragma comment( lib, "opencv_highgui220d.lib" )  
  15. #pragma comment( lib, "opencv_imgproc220d.lib" )  
  16. #endif  
  17. #else  
  18. #ifdef RC_OPENCV_2_1_0  
  19. #pragma comment( lib, "cxcore210.lib" )  
  20. #pragma comment( lib, "cv210.lib" )  
  21. #pragma comment( lib, "highgui210.lib" )  
  22. #else  
  23. #pragma comment( lib, "opencv_core220.lib" )  
  24. #pragma comment( lib, "opencv_highgui220.lib" )  
  25. #pragma comment( lib, "opencv_imgproc220.lib" )  
  26. #endif  
  27. #endif  
  28.   
  29. void main()  
  30. {  
  31.     /** 打开输入视频文件 */  
  32.     cv::VideoCapture vc;  
  33.     vc.open( ".//test.avi" );  
  34.       
  35.     if ( vc.isOpened() )  
  36.     {  
  37.         /** 打开输出视频文件 */  
  38.         cv::VideoWriter vw;  
  39.         vw.open( ".//output.avi", // 输出视频文件名  
  40.                 (int)vc.get( CV_CAP_PROP_FOURCC ), // 也可设为CV_FOURCC_PROMPT,在运行时选取  
  41.                 (double)vc.get( CV_CAP_PROP_FPS ), // 视频帧率  
  42.                 cv::Size( (int)vc.get( CV_CAP_PROP_FRAME_WIDTH ), (int)vc.get( CV_CAP_PROP_FRAME_HEIGHT ) ), // 视频大小  
  43.                 true ); // 是否输出彩色视频  
  44.   
  45.         /** 如果成功打开输出视频文件 */  
  46.         if ( vw.isOpened() )  
  47.         {  
  48.             while ( true )  
  49.             {  
  50.                 /** 读取当前视频帧 */  
  51.                 cv::Mat frame;  
  52.                 vc >> frame;  
  53.   
  54.                 /** 若视频读取完毕,跳出循环 */  
  55.                 if ( frame.empty() )  
  56.                 {  
  57.                     break;  
  58.                 }  
  59.   
  60.                 /** 将视频写入文件 */  
  61.                 vw << frame;  
  62.             }  
  63.         }  
  64.     }  
  65.   
  66.     /** 手动释放视频捕获资源 */  
  67.     vc.release();  
  68. }  

      运行结果

0 0
原创粉丝点击