博客
关于我
利用JavaCV实现将视频以帧方式抽取
阅读量:327 次
发布时间:2019-03-04

本文共 2545 字,大约阅读时间需要 8 分钟。

使用前: 在用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();        }    }}

转载地址:http://asgq.baihongyu.com/

你可能感兴趣的文章
MySQL全面瓦解:安装部署与准备
查看>>
mysql共享锁与排他锁
查看>>
MySQL内存表使用技巧
查看>>
MySQL再叙(体系结构、存储引擎、索引、SQL执行过程)
查看>>
mysql出现错误的解决办法
查看>>
MySQL函数
查看>>
mysql函数汇总之字符串函数
查看>>
mysql函数汇总之数学函数
查看>>
mysql函数汇总之日期和时间函数
查看>>
mysql函数汇总之条件判断函数
查看>>
mysql函数汇总之系统信息函数
查看>>
MySQL函数简介
查看>>
mysql函数遍历json数组
查看>>
MySQL函数(转发)
查看>>
mysql分区表
查看>>
MySQL分层架构与运行机制详解
查看>>
mysql分库分表中间件简书_MySQL分库分表
查看>>
MySQL分库分表会带来哪些问题?分库分表问题
查看>>
MySQL分组函数
查看>>
MySQL分组查询
查看>>