使用前:在用JavaCV实现以帧方式抽取视频的前,我们需要先从bytedeco/JavaCV下载第三方的压缩包,解压后按自己的需求往自己的IDE(*想法/Eclipse *)导入解压缩包下JAR文件;
接下来就以代码方式来说明如何利用Javacv来将视频以帧的方式抽取出来:
进口org.bytedeco.javacv.FFmpegFrameGrabber; 进口org.bytedeco.javacv.Frame; 进口org.bytedeco.javacv.Java2DFrameConverter; 进口javax.imageio.ImageIO; 进口java.awt.image.BufferedImage; 进口java.io.File; 进口java.io.IOException; 进口静态org.bytedeco.javacpp.opencv_core.IplImage; 进口静态org.bytedeco.javacpp.opencv_core.cvReleaseImage; 进口静态org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage; 进口静态org.bytedeco.javacpp.opencv_imgcodecs.cvSaveImage; 进口静态org.bytedeco.javacpp.opencv_imgproc.cvSmooth; 公开课JavaCV {//图像的路径; 最终的静态字符串imagePath=?home/枪/abc.jpg/?//视频的路径和文件名; 最终的静态字符串vedioPath=?home/枪/要好办/? 最终的静态字符串vedioName=" origin-a.mp4”; 公共静态void main (String [] args){抛出异常 光滑(imagePath); grabberFFmpegImage (vedioPath + vedioName vedioPath vedioName 30); }//压缩图像的方法; 公共静态空间平滑(字符串文件名){ IplImage IplImage=cvLoadImage(文件名); 如果(iplImage !=null) { cvSmooth (iplImage iplImage); cvSaveImage(文件名,iplImage); cvReleaseImage (iplImage); } }//获取ffmpegImage视频; 公共静态孔隙grabberFFmpegImage (fileTargetPath filePath的字符串,字符串 、字符串fileTargetName int grabSize)抛出异常{ FFmpegFrameGrabber ff=FFmpegFrameGrabber.createDefault (filePath); ff.start (); for (int i=0;我& lt;grabSize;我+ +){ 框架框架=ff.grabImage (); doExecuteFrame(框架、filePath fileTargetName,我); } ff.stop (); }//获取从视频帧; 公共静态孔隙doExecuteFrame (targetFileName targetFilePath框架框架,字符串,字符串,整数指数){ 如果(?=null | |框架。形象==null) { 返回; } Java2DFrameConverter转换器=new Java2DFrameConverter (); 字符串imageMat=癹pg”; 字符串文件名=targetFilePath +文件。pathSeparator + targetFileName +“_”+指数+“。”+ imageMat; BufferedImage bi=converter.getBufferedImage(框架); 文件输出=新文件(文件名); 尝试{ ImageIO。写(bi、imageMat、输出); }捕捉(IOException e) { e.printStackTrace (); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。