视频转图片序列 java_OpenCV 视频与图片序列相互转换_洛城小天使i的博客-程序员秘密

技术标签: 视频转图片序列 java  

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 }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42509868/article/details/114508984

智能推荐

virtualbox安装ubuntu server版本实现互通_熊猫上香的博客-程序员秘密

Win7下通过virtualbox安装ubuntu server虚拟机实现网络互通(记录下,省的自己每次都要浪费时间在这上面)1.网络连接方式:网络地址转换(nat)方式和仅主机(host-only)方式。nat在网卡1位置,host-only在网卡2位置2.Ubuntu开机后仍无法上网,ifconfig发现第二块网卡默认没有启动。我们可以通过ifconfig命令让Ubuntu开启第二块网

SpringBoot框架的优点_springboot框架优点_普通网友的博客-程序员秘密

官方命名格式:spring-boot-starter-*,第三方命名格式:*-spring-boot-starter。另外,第三方工具的使用,也只需引入starter,配置文件配置一下账号密码,有种开箱即用的感觉。SprignBoot框架本身基于Spring搭建(就好比Spring基于Java一样),完全迁移利用了Spring的所有特性,可以直接用于构建Spring应用,功力只增不减。没错,打比方说,如果用Spring框架写代码是雨中漫步,那么 给Spring穿上靴子,会不会方便些呢?

win10 64 MingW64+msys_mingw64 及msys64_晴树SEU的博客-程序员秘密

参考https://sourceforge.net/projects/mingw/https://blog.csdn.net/hutianyou123/article/details/78284066MingW64http://sourceforge.net/projects/mingw-w64/?source=recommended安装在c:/MinGW...

C语言 string::size_type类型_weixin_30604651的博客-程序员秘密

string::size_type类型从逻辑上来讲,size()成员函数似乎应该返回整型数值,或如2.2节“建议”中所述的无符号整数。但事实上,size操作返回的是string::size_type类型的值。我们需要对这种类型做一些解释。string类类型和许多其他库类型都定义了一些伙伴类型(companion types)。这些伙伴类型使得库类型的使用是机器无关的(machine-indepen...

知道防火墙是什么吗?WAF (web application Firewall)防火墙原理及其简单绕过_AAAAAAAAAAAA66的博客-程序员秘密

不会吧,不会吧,不会还有人没听过防火墙吧?~~听过是一回事,但了不了解又是另外一会事了,在我小时候,家里电脑刚买,对电脑那是相当的’爱护‘,每次开机都得克制我玩游戏的强烈欲望,先用对电脑进行杀毒,那免不了天天和360安全卫士打交道,凡是联了网,它就会显示防火墙已开启。(其实360也有着作为防火墙的功能)这样就应该是我认识防火墙这个词的过程的过程,不过真正的仔细了解还是在若干年后的大学了,计算机专业说不知道防火墙就有点说不过去了。偷偷问一句,你们还用360不?目录简介防火墙的类型1

关于vue中滚动监听失效问题_weixin_30548917的博客-程序员秘密

在vue项目中,监听window滚动失效;并且document.body.scrollTop一直是0的情况!查找了许多资料;并没有找到合理的解决方案;最中发现,在index.html设置了html,body的宽高设置成了100%;这样会造成window.onscroll监听不到正确的滚出高度(恒为0);不和你们多bb:解决方案:将html,body的height设...

随便推点

flutter框架好学吗,有什么优点_flutter好学吗_无忧城435的博客-程序员秘密

Flutter是什么Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。简单来说,Flutter是一款移动应用程序SDK,包含框架、控件和一些工具,可以用一套代码同时构建Android和iOS应用,并且性能可以达到原生应用一样的性能。配置开发环境Flutter开发可以在macOS,Linux或Windows上完成。虽然您可以在F

Android程序员如何写好Unit Test_JT·Zeng的博客-程序员秘密

Unit Test学习笔记什么是Unit TestUnit Test即单元测试,单元测试是应用测试策略中的基本测试。通过针对代码创建和运行单元测试,您可以轻松验证各个单元的逻辑是否正确。在每次构建后运行单元测试可帮助您快速捕捉和修复由应用的代码更改导致的软件回归。测试应用是应用开发过程中不可或缺的一部分。通过持续对应用运行测试,您可以在公开发布应用之前验证其正确性、功能行为和易用性。测试还会为您提供以下优势:快速获得故障反馈。在开发周期中尽早进行故障检测。更安全的代码重构,让..

关于axios的post用法_axios.post_luolvzhou的博客-程序员秘密

axios.post('', { data: params},{ headers: { 'Access-Control-Allow-Origin':'*', //解决cors头问题 'Access-Control-Allow-Credentials':'true', //解决session问题 'Content-Type': '...

找两条平行直线的中间直线_翟羽嚄的博客-程序员秘密

要求如图所示,需要找到白色过道中间直线方程,为了下一步放置挡板用,挡板中轴线与过道中轴线的误差不超过1cm。效果图程序代码****************************************************************************************/#include&amp;amp;lt;opencv2/opencv.hpp&amp;amp;gt;#inc...

Invalid column index (256). Allowable column range for BIFF8 is (0..255) or (‘A‘..‘IV‘)异常,处理方法记录_invalid column index (256). allowable column range_yanyundi的博客-程序员秘密

这里写自定义目录标题问题出现原因解决代码问题出现原因HSSFWorkbook对于单元格提供下拉选项的个数限制了255长度问题,这个时候可以使用XSSFWorkbook并把候选项以列显示可以解决了解决代码//导出execel public void exportComboxExcel(OutputStream fos) { try { workbook = new XSSFWorkbook();//excel文件对象 XSSFShee