45 {
46 sprintf_s(fullVideoName,"%s",videoName);//把videoName打印成一个字符串保存在fullVideoName 中
47 }
48 else
49 {
50 if (_access(outDir,0)==-1)
51 {
52 recursive_mkdir(outDir);
53 }
54 sprintf_s(fullVideoName,"%s%s",outDir,videoName);//将字符串outDir和videoName连接起来,打印,保存在fullVideoName中
55 }
56 int frameCount=0;
57 CvVideoWriter *pWriter=NULL;
58 CvSize size=cvSize(imgW,imgH);
59 pWriter=cvCreateVideoWriter(videoName,fourcc,fps,size,isColor);//CREATE WRITER
60
61 IplImage *pImg=NULL;
62 char cur_fn[255];//表示某张图片的路径
63 while(startFrame<=endFrame)
64 {
65 strcpy_s(cur_fn,"");
66 sprintf_s(cur_fn,"%s%d%s",inputDir,startFrame,imgExt);//need to change
67 pImg=cvLoadImage(cur_fn,isColor);
68 if (!pImg)
69 {
70 std::cout<
71 return frameCount;
72 }
73 cvWriteFrame(pWriter,pImg);
74 cvWaitKey(1);
75 std::cout<
76 startFrame++;
77 cvReleaseImage(&pImg);
78 frameCount++;
79 }
80 cvReleaseVideoWriter(&pWriter);
81 rename(videoName,fullVideoName);//移动文件到指定文件夹
82 return frameCount;
83 }
84 //将视频转换为图片序列 返回由视频分解得到的图片总帧数 目前OpenCV只支持AVI格式 因此使用之前需要
85 //将视频转化问AVI格式
86
87 int VideoToImage(char* videoName,char* outDir,char* imgExt,int maxFrameCount)
88 {
89 CvCapture *cap= cvCaptureFromFile(videoName);
90 if (cap==NULL)
91 {
92 return 0;
93 }
94 //保存图片的文件夹路径一定要有,因为OpenCV不会自动创建文件夹
95 if (_access(outDir,0)==-1)
96 {
97 recursive_mkdir(outDir);
98 std::cout<
99 }
100 char cur_fn[255];//保存当前帧所得图片的文件名
101 IplImage* pImg=NULL;
102 int frame=0;
103 while((pImg=cvQueryFrame(cap))!=NULL&&(frame
104 {
105 frame++;
106 strcpy_s(cur_fn,"");
107 sprintf_s(cur_fn,"%s%d%s",outDir,frame,imgExt);//这里的设置适合形如 123.jpg 124.jpg的图片序列
108 cvSaveImage(cur_fn,pImg,NULL);
109 }
110 cvReleaseImage(&pImg);
111 cvReleaseCapture(&cap);
112 return frame;
113 }
114
115
116 //该函数借鉴了网上资料,自动创建多级目录
117 int recursive_mkdir( char *dir )
118 {
119 //分解路径名E:\\AA\\BB\\CC\\
120 //
121 std::string str = dir;
122 int index = 0;
123 int i = 0;
124 while(1)
125 {
126 std::string::size_type pos = str.find("\\",index);
127 std::string str1;
128 str1 = str.substr(0,pos);
129 if( pos != -1 && i > 0 )
130 {
131 if (_access(str1.c_str(),0)==-1)
132 {
133 _mkdir(str1.c_str());
134 }
135 }
136 if( pos==-1 )
137 {
138 break;
139 }
140 i ++;
141 index = pos+1;
142 }
143 return 0;
144 }