OSDN Git Service

3c18e027795a21e4107fc7c0ec5a8ca932df0e76
[psychlops/cpp.git] / psychlops / platform / cv / psychlops_misc_opencv.cpp
1 /*
2  *  psychlops_widgets_Win32GL.cpp
3  *  Psychlops Standard Library (Universal)
4  *
5  *  Last Modified 2009/12/14 by Kenchi HOSOKAWA
6  *  (C) 2009 Kenchi HOSOKAWA, Kazushi MARUYA and Takao SATO
7  */
8
9 \r
10 #include <opencv2/core/core.hpp>\r
11 #include <opencv2/highgui/highgui.hpp>\r
12 #include "../../extension/standard/figure/psychlops_figure_standard.h"\r
13 \r
14
15 namespace Psychlops {\r
16 \r
17         Figures::Movie& Figures::Movie::save(std::string filename, const double t_fps, const FOURCC codec) {\r
18                 double fps;\r
19                 if(t_fps<=0.0) { fps = 60.0; } else { fps = t_fps; }\r
20                 if(frames.size()>0)\r
21                 {\r
22                         std::cout << "Movie::save : in progress...";\r
23                         cv::Size size_of_frame(frames[0]->getWidth(), frames[0]->getHeight());\r
24                         cv::Mat frame;\r
25                         int fourcc = 0;\r
26                         switch(codec) {\r
27                         case AUTO:\r
28                                 unsigned int loc;\r
29                                 loc = filename.find(".avi",0);\r
30                                 if( loc != std::string::npos ) { fourcc = CV_FOURCC('M','J','P','G'); break; }\r
31                                 loc = filename.find(".mov",0);\r
32                                 if( loc != std::string::npos ) { fourcc = CV_FOURCC('M','J','P','G'); break; }\r
33                                 loc = filename.find(".m4v",0);\r
34                                 if( loc != std::string::npos ) { fourcc = CV_FOURCC('M','P','4','V'); break; }\r
35                                 break;\r
36                         case DIB:\r
37                                 fourcc = CV_FOURCC('D','I','B',' ');\r
38                                 break;\r
39                         case HFYU:\r
40                                 fourcc = CV_FOURCC('H','F','Y','U');\r
41                                 break;\r
42                         case PIM1:\r
43                                 fourcc = CV_FOURCC('P','I','M','1');\r
44                                 break;\r
45                         case MJPG:\r
46                                 fourcc = CV_FOURCC('M','J','P','G');\r
47                                 break;\r
48                         case DIVX:\r
49                                 fourcc = CV_FOURCC('D','I','V','X');\r
50                                 break;\r
51                         case XVID:\r
52                                 fourcc = CV_FOURCC('X','V','I','D');\r
53                                 break;\r
54                         case MP4V:\r
55                                 fourcc = CV_FOURCC('M','P','4','V');\r
56                                 break;\r
57                         }\r
58                         cv::VideoWriter writer(filename, fourcc, fps, size_of_frame);\r
59                         for(int i=0; i<frames.size(); i++)\r
60                         {\r
61                                 frames[i]->to(frame);\r
62                                 writer << frame;\r
63                         }\r
64                 } else {\r
65                         std::cout << "Movie::save : The movie is empty.";\r
66                 }
67                 return *this;\r
68         }\r
69 \r
70
71 }       /*      <- namespace Psycholops         */\r