博客
关于我
利用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中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
查看>>
mysql中还有窗口函数?这是什么东西?
查看>>
mysql中间件
查看>>
MYSQL中频繁的乱码问题终极解决
查看>>
MySQL为Null会导致5个问题,个个致命!
查看>>
MySQL为什么不建议使用delete删除数据?
查看>>
MySQL主从、环境搭建、主从配制
查看>>
Mysql主从不同步
查看>>
mysql主从同步及清除信息
查看>>
MySQL主从同步相关-主从多久的延迟?
查看>>
mysql主从同步配置方法和原理
查看>>
mysql主从复制 master和slave配置的参数大全
查看>>