博客
关于我
利用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数据库简单的状态检查(show processlist)
查看>>
MYSQL数据库简单的状态检查(show status)
查看>>
MySQL数据库系列
查看>>
MYSQL数据库自动本地/异地双备份/MYSQL增量备份
查看>>
mysql数据库表增添字段,删除字段、修改字段的排列等操作,还不快来
查看>>
MySQL数据库被黑了
查看>>
mysql数据库设计
查看>>
MySQL数据库设计与开发规范
查看>>
MYSQL数据库进阶操作
查看>>
MySQL数据库配置文件调优详解
查看>>
MySQL数据库酒店客房管理系统(含MySQL源码) 结课作业 做的不是很好
查看>>
mysql数据库里的一些坑(读高性能mysql有感)
查看>>
MySQL数据库面试题(2021最新版)
查看>>
MySQL数据库高并发优化配置
查看>>
mysql数据恢复
查看>>
MySQL数据的主从复制、半同步复制和主主复制详解
查看>>
mysql数据碎片整理
查看>>
MySQL数据类型
查看>>