博客
关于我
利用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/

你可能感兴趣的文章
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>
MongoDB学习笔记(8)--索引及优化索引
查看>>
mongodb定时备份数据库
查看>>
mppt算法详解-ChatGPT4o作答
查看>>
mpvue的使用(一)必要的开发环境
查看>>
MQ 重复消费如何解决?
查看>>
mqtt broker服务端
查看>>
MQTT 保留消息
查看>>
MQTT 持久会话与 Clean Session 详解
查看>>
MQTT工作笔记0007---剩余长度
查看>>
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
Mqtt搭建代理服务器进行通信-浅析
查看>>
MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
查看>>
ms sql server 2008 sp2更新异常
查看>>
MS UC 2013-0-Prepare Tool
查看>>
MSBuild 教程(2)
查看>>
msbuild发布web应用程序
查看>>
MSB与LSB
查看>>
MSCRM调用外部JS文件
查看>>
MSCRM调用外部JS文件
查看>>