首页 > 编程 > Java > 正文

JavaCV实现将视频以帧方式抽取

2019-11-26 08:47:04
字体:
来源:转载
供稿:网友

使用前: 在用JavaCV实现以帧方式抽取视频的前,我们需要先从bytedeco/javacv下载第三方的压缩包,解压后按自己的需求往自己的IDE ( * IDEA / Eclipse * ) 导入解压缩包下JAR文件;

接下来就以代码方式来说明如何利用Javacv来将视频以帧的方式抽取出来:

import org.bytedeco.javacv.FFmpegFrameGrabber;import org.bytedeco.javacv.Frame;import org.bytedeco.javacv.Java2DFrameConverter;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import static org.bytedeco.javacpp.opencv_core.IplImage;import static org.bytedeco.javacpp.opencv_core.cvReleaseImage;import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage;import static org.bytedeco.javacpp.opencv_imgcodecs.cvSaveImage;import static org.bytedeco.javacpp.opencv_imgproc.cvSmooth;public class JavaCV {  // the image's path;  final static String imagePath = "/home/lance/abc.jpg/";  // the vedio's path and filename;  final static String vedioPath = "/home/lance/target-a/";  final static String vedioName = "origin-a.mp4";  public static void main(String[] args) throws Exception {    smooth(imagePath);    grabberFFmpegImage(vedioPath + vedioName, vedioPath        , vedioName, 30);  }  // the method of compress image;  public static void smooth(String fileName) {    IplImage iplImage = cvLoadImage(fileName);    if (iplImage != null) {      cvSmooth(iplImage, iplImage);      cvSaveImage(fileName, iplImage);      cvReleaseImage(iplImage);    }  }  // grab ffmpegImage from vedio;  public static void grabberFFmpegImage(String filePath, String fileTargetPath      , String fileTargetName, int grabSize) throws Exception{    FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);    ff.start();    for (int i = 0; i < grabSize; i++){      Frame frame = ff.grabImage();      doExecuteFrame(frame, filePath, fileTargetName, i);    }    ff.stop();  }  // grab frame from vedio;  public static void doExecuteFrame(Frame frame, String targetFilePath, String targetFileName, int index) {    if ( frame == null || frame.image == null) {      return;    }    Java2DFrameConverter converter = new Java2DFrameConverter();    String imageMat = "jpg";    String fileName = targetFilePath + File.pathSeparator + targetFileName + "_" + index + "." + imageMat;    BufferedImage bi = converter.getBufferedImage(frame);    File output = new File(fileName);    try{      ImageIO.write(bi, imageMat, output);    } catch (IOException e) {      e.printStackTrace();    }  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表