博客
关于我
利用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 批量修改四种方式效率对比(一)
查看>>
mysql 批量插入
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>