视频转图片序列 java_OpenCV 视频与图片序列相互转换

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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值